diff --git a/cmake_targets/CMakeLists.txt b/cmake_targets/CMakeLists.txt index 5a682535e0..4f482cb660 100644 --- a/cmake_targets/CMakeLists.txt +++ b/cmake_targets/CMakeLists.txt @@ -138,8 +138,8 @@ if (CMAKE_SYSTEM_PROCESSOR STREQUAL "armv7l") else (CMAKE_SYSTEM_PROCESSOR STREQUAL "armv7l") if(EXISTS "/proc/cpuinfo") file(STRINGS "/proc/cpuinfo" CPUINFO REGEX flags LIMIT_COUNT 1) - if (CPUINFO MATCHES "avx512f") - set(C_FLAGS_PROCESSOR "${C_FLAGS_PROCESSOR} -march=skylake-avx512 -mtune=skylake-avx512") + if (CPUINFO MATCHES "avx512bw") + set(C_FLAGS_PROCESSOR "${C_FLAGS_PROCESSOR} -mavx512bw") set(COMPILATION_AVX2 "True") else() if (CPUINFO MATCHES "avx2") diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_decoder.c b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_decoder.c index 13223a1e40..893eee5574 100644 --- a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_decoder.c +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_decoder.c @@ -333,8 +333,8 @@ static inline uint32_t nrLDPC_decoder_core(int8_t* p_llr, int8_t* p_out, t_nrLDP { case 384: { - // nrLDPC_cnProc_BG1_Z384_13_AVX2(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); - nrLDPC_cnProc_BG1_Z384_13_AVX512(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); //we test here + //nrLDPC_cnProc_BG1_Z384_13_AVX2(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + nrLDPC_cnProc_BG1_Z384_13_AVX512(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); //we test here break; } case 352: @@ -1475,7 +1475,7 @@ static inline uint32_t nrLDPC_decoder_core(int8_t* p_llr, int8_t* p_out, t_nrLDP 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); + //nrLDPC_cnProc_BG2_Z384_13_AVX512(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); break; } case 352: @@ -1922,7 +1922,7 @@ static inline uint32_t nrLDPC_decoder_core(int8_t* p_llr, int8_t* p_out, t_nrLDP { case 384: { - // nrLDPC_cnProc_BG1_Z384_13_AVX2(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); + //nrLDPC_cnProc_BG1_Z384_13_AVX2(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); nrLDPC_cnProc_BG1_Z384_13_AVX512(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); //we test here break; } @@ -2273,7 +2273,7 @@ static inline uint32_t nrLDPC_decoder_core(int8_t* p_llr, int8_t* p_out, t_nrLDP 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); + //nrLDPC_cnProc_BG2_Z384_13_AVX512(p_procBuf->cnProcBuf,p_procBuf->cnProcBufRes); break; } case 352: diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_init_mem.h b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_init_mem.h index 3292c0debe..acd40d5d2d 100644 --- a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_init_mem.h +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_init_mem.h @@ -42,7 +42,7 @@ */ static inline void* malloc32_clear(size_t size) { - void* ptr = (void*) memalign(32, size+32); + void* ptr = (void*) memalign(64, size+64); memset(ptr, 0, size); return ptr; } 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 5f58a090ec..a3bee96b47 100644 --- a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_avx2/Makefile +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_avx2/Makefile @@ -8,12 +8,12 @@ OBJ= $(SRC:.c=.o) all: $(EXEC) cnProc_gen_avx2: $(OBJ) - @$(CC) -o $@ $^ $(LDFLAGS) -O2 + @$(CC) -o $@ $^ $(LDFLAGS) -O2 #main.o: cnProc_gen_avx2.h %.o: %.c - @$(CC) -o $@ -c $< $(CFLAGS) -I ${OPENAIR_HOME}/openair1 -g + @$(CC) -o $@ -c $< $(CFLAGS) -I ${OPENAIR_HOME}/openair1 -g -std=c99 .PHONY: clean mrproper diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_avx2/cnProc_gen_BG1_avx2.c b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_avx2/cnProc_gen_BG1_avx2.c index 562caa6f26..c9b371038f 100644 --- a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_avx2/cnProc_gen_BG1_avx2.c +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_avx2/cnProc_gen_BG1_avx2.c @@ -21,7 +21,6 @@ void nrLDPC_cnProc_BG1_generator_AVX2(uint16_t Z,int R) fprintf(fd,"#include \n"); fprintf(fd,"#include \n"); - fprintf(fd,"#include "\"../include/avx512fintrin.h>\"\n"); fprintf(fd,"void nrLDPC_cnProc_BG1_Z%d_%s_AVX2(int8_t* cnProcBuf,int8_t* cnProcBufRes) {\n",Z,ratestr[R]); @@ -411,10 +410,10 @@ void nrLDPC_cnProc_BG1_generator_AVX2(uint16_t Z,int R) // 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}}; + const uint8_t lut_idxCnProcG8[8][7] = {{24,48,72,96,112,144,168}, {0,48,72,96,112,144,168}, + {0,24,72,96,112,144,168}, {0,24,48,96,112,144,168}, + {0,24,48,72,112,144,168}, {0,24,48,72,96,144,168}, + {0,24,48,72,96,112,168}, {0,24,48,72,96,112,144}}; 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 old mode 100644 new mode 100755 index 1d463e5c74..0f56660ba8 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_avx512/Makefile b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_avx512/Makefile index 5d80ba79e8..b17a7fe62a 100644 --- a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_avx512/Makefile +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_avx512/Makefile @@ -13,7 +13,7 @@ cnProc_gen_avx512: $(OBJ) #main.o: cnProc_gen_avx512.h %.o: %.c - @$(CC) -o $@ -c $< $(CFLAGS) -I ${OPENAIR_HOME}/openair1 -g + @$(CC) -o $@ -c $< $(CFLAGS) -I ${OPENAIR_HOME}/openair1 -g -std=c99 .PHONY: clean mrproper diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_avx512/cnProc_gen_BG1_avx512.c b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_avx512/cnProc_gen_BG1_avx512.c index a6ffe84223..b4ccb0a906 100644 --- a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_avx512/cnProc_gen_BG1_avx512.c +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_avx512/cnProc_gen_BG1_avx512.c @@ -1,8 +1,6 @@ +#include #include -#include #include "../../nrLDPCdecoder_defs.h" -#include "../../nrLDPC_types.h" -#include "../../nrLDPC_bnProc.h" void nrLDPC_cnProc_BG1_generator_AVX512(uint16_t Z,int R) { @@ -22,12 +20,7 @@ void nrLDPC_cnProc_BG1_generator_AVX512(uint16_t Z,int R) 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, "#define conditional_negate(a,b,z) _mm512_mask_sub_epi8(a,_mm512_movepi8_mask(b),z,a)\n"); fprintf(fd,"void nrLDPC_cnProc_BG1_Z%d_%s_AVX512(int8_t* cnProcBuf,int8_t* cnProcBufRes) {\n",Z,ratestr[R]); @@ -69,21 +62,21 @@ void nrLDPC_cnProc_BG1_generator_AVX512(uint16_t Z,int R) // Offsets are in units of bitOffsetInGroup (1*384/64)=6 // Offsets are in units of bitOffsetInGroup (1*384/64)=6 - const uint8_t lut_idxCnProcG3[3][2] = {{6,12}, {0,12}, {0,6}}; + const uint8_t lut_idxCnProcG3[3][2] = {{12,24}, {0,24}, {0,12}}; - fprintf(fd," __m512i zmm0, min, sgn,ones,maxLLR;\n"); - fprintf(fd," ones = _mm512_set1_epi8((char)1);\n"); + fprintf(fd," __m512i zmm0, min, sgn,zeros,maxLLR;\n"); + fprintf(fd," zeros = _mm512_setzero_si512();\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; + M = (lut_numCnInCnGroups[0]*Z + 63)>>6; // Set the offset to each bit within a group in terms of 64 Byte - bitOffsetInGroup = (lut_numCnInCnGroups_BG1_R13[0]*NR_LDPC_ZMAX)>>5; + bitOffsetInGroup = (lut_numCnInCnGroups_BG1_R13[0]*NR_LDPC_ZMAX)>>6; // Set pointers to start of group 3 @@ -104,53 +97,51 @@ void nrLDPC_cnProc_BG1_generator_AVX512(uint16_t Z,int R) fprintf(fd," for (int i=0;i<%d;i+=2) {\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[0]>>5)+lut_idxCnProcG3[j][0]); - // sgn = _mm512_sign_epi16(ones, zmm0); - fprintf(fd," sgn = _mm512_sign_epi16(ones, zmm0);\n"); + fprintf(fd," sgn = ((__m512i*)cnProcBuf)[%d+i];\n",(lut_startAddrCnGroups[0]>>6)+lut_idxCnProcG3[j][0]/2); + // sgn = _mm512_sign_epi8(ones, zmm0); // min = _mm512_abs_epi8(zmm0); - fprintf(fd," min = _mm512_abs_epi8(zmm0);\n"); + fprintf(fd," min = _mm512_abs_epi8(sgn);\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]); + fprintf(fd," zmm0 = ((__m512i*)cnProcBuf)[%d+i];\n",(lut_startAddrCnGroups[0]>>6)+lut_idxCnProcG3[j][1]/2); // 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"); + // sgn = _mm512_sign_epi8(sgn, zmm0); + fprintf(fd," sgn = _mm512_xor_si512(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 = _mm512_sign_epi8(min, sgn); // p_cnProcBufResBit++; - fprintf(fd," ((__m512i*)cnProcBufRes)[%d+i] = _mm512_sign_epi16(min, sgn);\n",(lut_startAddrCnGroups[0]>>5)+(j*bitOffsetInGroup)); + fprintf(fd," ((__m512i*)cnProcBufRes)[%d+i] = conditional_negate(min, sgn,zeros);\n",(lut_startAddrCnGroups[0]>>6)+(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"); + fprintf(fd," sgn = ((__m512i*)cnProcBuf)[%d+i];\n",(lut_startAddrCnGroups[0]>>6)+(lut_idxCnProcG3[j][0]/2)+1); + // sgn = _mm512_sign_epi8(ones, zmm0); // min = _mm512_abs_epi8(zmm0); - fprintf(fd," min = _mm512_abs_epi8(zmm0);\n"); + fprintf(fd," min = _mm512_abs_epi8(sgn);\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); + fprintf(fd," zmm0 = ((__m512i*)cnProcBuf)[%d+i];\n",(lut_startAddrCnGroups[0]>>6)+(lut_idxCnProcG3[j][1]/2)+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"); + // sgn = _mm512_sign_epi8(sgn, zmm0); + fprintf(fd," sgn = _mm512_xor_si512(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 = _mm512_sign_epi8(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," ((__m512i*)cnProcBufRes)[%d+i] = conditional_negate(min, sgn,zeros);\n",(lut_startAddrCnGroups[0]>>6)+(j*bitOffsetInGroup)+1); fprintf(fd," }\n"); } @@ -160,16 +151,16 @@ void nrLDPC_cnProc_BG1_generator_AVX512(uint16_t Z,int R) // Process group with 4 BNs fprintf(fd,"//Process group with 4 BNs\n"); // Offset is 5*384/64 = 30 - const uint8_t lut_idxCnProcG4[4][3] = {{30,60,90}, {0,60,90}, {0,30,90}, {0,30,60}}; + const uint8_t lut_idxCnProcG4[4][3] = {{60,120,180}, {0,120,180}, {0,60,180}, {0,60,120}}; 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; + M = (lut_numCnInCnGroups[1]*Z + 63)>>6; // Set the offset to each bit within a group in terms of 64 Byte - bitOffsetInGroup = (lut_numCnInCnGroups_BG1_R13[1]*NR_LDPC_ZMAX)>>5; + bitOffsetInGroup = (lut_numCnInCnGroups_BG1_R13[1]*NR_LDPC_ZMAX)>>6; // Set pointers to start of group 4 @@ -188,31 +179,30 @@ void nrLDPC_cnProc_BG1_generator_AVX512(uint16_t Z,int R) 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"); + fprintf(fd," sgn = ((__m512i*)cnProcBuf)[%d+i];\n",(lut_startAddrCnGroups[1]>>6)+lut_idxCnProcG4[j][0]/2); + // sgn = _mm512_sign_epi8(ones, zmm0); // min = _mm512_abs_epi8(zmm0); - fprintf(fd," min = _mm512_abs_epi8(zmm0);\n"); + fprintf(fd," min = _mm512_abs_epi8(sgn);\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]); + fprintf(fd," zmm0 = ((__m512i*)cnProcBuf)[%d+i];\n",(lut_startAddrCnGroups[1]>>6)+lut_idxCnProcG4[j][k]/2); // 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"); + // sgn = _mm512_sign_epi8(sgn, zmm0); + fprintf(fd," sgn = _mm512_xor_si512(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 = _mm512_sign_epi8(min, sgn); // p_cnProcBufResBit++; - fprintf(fd," ((__m512i*)cnProcBufRes)[%d+i] = _mm512_sign_epi16(min, sgn);\n",(lut_startAddrCnGroups[1]>>5)+(j*bitOffsetInGroup)); + fprintf(fd," ((__m512i*)cnProcBufRes)[%d+i] = conditional_negate(min, sgn,zeros);\n",(lut_startAddrCnGroups[1]>>6)+(j*bitOffsetInGroup)); fprintf(fd," }\n"); } } @@ -222,18 +212,18 @@ void nrLDPC_cnProc_BG1_generator_AVX512(uint16_t Z,int R) // 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] = {{108,216,324,432}, {0,216,324,432}, - {0,108,324,432}, {0,108,216,432}, {0,108,216,324}}; + const uint16_t lut_idxCnProcG5[5][4] = {{216,432,648,864}, {0,432,648,864}, + {0,216,648,864}, {0,216,432,864}, {0,216,432,648}}; 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; + M = (lut_numCnInCnGroups[2]*Z + 63)>>6; // Set the offset to each bit within a group in terms of 64 Byte - bitOffsetInGroup = (lut_numCnInCnGroups_BG1_R13[2]*NR_LDPC_ZMAX)>>5; + bitOffsetInGroup = (lut_numCnInCnGroups_BG1_R13[2]*NR_LDPC_ZMAX)>>6; // Set pointers to start of group 4 @@ -253,31 +243,30 @@ void nrLDPC_cnProc_BG1_generator_AVX512(uint16_t Z,int R) 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"); + fprintf(fd," sgn = ((__m512i*)cnProcBuf)[%d+i];\n",(lut_startAddrCnGroups[2]>>6)+lut_idxCnProcG5[j][0]/2); + // sgn = _mm512_sign_epi8(ones, zmm0); // min = _mm512_abs_epi8(zmm0); - fprintf(fd," min = _mm512_abs_epi8(zmm0);\n"); + fprintf(fd," min = _mm512_abs_epi8(sgn);\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]); + fprintf(fd," zmm0 = ((__m512i*)cnProcBuf)[%d+i];\n",(lut_startAddrCnGroups[2]>>6)+lut_idxCnProcG5[j][k]/2); // 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"); + // sgn = _mm512_sign_epi8(sgn, zmm0); + fprintf(fd," sgn = _mm512_xor_si512(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 = _mm512_sign_epi8(min, sgn); // p_cnProcBufResBit++; - fprintf(fd," ((__m512i*)cnProcBufRes)[%d+i] = _mm512_sign_epi16(min, sgn);\n",(lut_startAddrCnGroups[2]>>5)+(j*bitOffsetInGroup)); + fprintf(fd," ((__m512i*)cnProcBufRes)[%d+i] = conditional_negate(min, sgn,zeros);\n",(lut_startAddrCnGroups[2]>>6)+(j*bitOffsetInGroup)); fprintf(fd," }\n"); } } @@ -286,19 +275,19 @@ void nrLDPC_cnProc_BG1_generator_AVX512(uint16_t Z,int R) // Process group with 6 BNs fprintf(fd,"//Process group with 6 BNs\n"); // Offset is 8*384/64 = 48 - const uint16_t lut_idxCnProcG6[6][5] = {{48,96,144,192,240}, {0,96,144,192,240}, - {0,48,144,192,240}, {0,48,96,192,240}, - {0,48,96,144,240}, {0,48,96,144,192}}; + const uint16_t lut_idxCnProcG6[6][5] = {{96,192,288,384,480}, {0,192,288,384,480}, + {0,96,288,384,480}, {0,96,192,384,480}, + {0,96,192,288,480}, {0,96,192,288,384}}; 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; + M = (lut_numCnInCnGroups[3]*Z + 63)>>6; // Set the offset to each bit within a group in terms of 64 Byte - bitOffsetInGroup = (lut_numCnInCnGroups_BG1_R13[3]*NR_LDPC_ZMAX)>>5; + bitOffsetInGroup = (lut_numCnInCnGroups_BG1_R13[3]*NR_LDPC_ZMAX)>>6; // Set pointers to start of group 4 @@ -318,31 +307,30 @@ void nrLDPC_cnProc_BG1_generator_AVX512(uint16_t Z,int R) 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"); + fprintf(fd," sgn = ((__m512i*)cnProcBuf)[%d+i];\n",(lut_startAddrCnGroups[3]>>6)+lut_idxCnProcG6[j][0]/2); + // sgn = _mm512_sign_epi8(ones, zmm0); // min = _mm512_abs_epi8(zmm0); - fprintf(fd," min = _mm512_abs_epi8(zmm0);\n"); + fprintf(fd," min = _mm512_abs_epi8(sgn);\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]); + fprintf(fd," zmm0 = ((__m512i*)cnProcBuf)[%d+i];\n",(lut_startAddrCnGroups[3]>>6)+lut_idxCnProcG6[j][k]/2); // 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"); + // sgn = _mm512_sign_epi8(sgn, zmm0); + fprintf(fd," sgn = _mm512_xor_si512(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 = _mm512_sign_epi8(min, sgn); // p_cnProcBufResBit++; - fprintf(fd," ((__m512i*)cnProcBufRes)[%d+i] = _mm512_sign_epi16(min, sgn);\n",(lut_startAddrCnGroups[3]>>5)+(j*bitOffsetInGroup)); + fprintf(fd," ((__m512i*)cnProcBufRes)[%d+i] = conditional_negate(min, sgn,zeros);\n",(lut_startAddrCnGroups[3]>>6)+(j*bitOffsetInGroup)); fprintf(fd," }\n"); } } @@ -352,20 +340,20 @@ void nrLDPC_cnProc_BG1_generator_AVX512(uint16_t Z,int R) // Process group with 7 BNs fprintf(fd,"//Process group with 7 BNs\n"); // Offset is 5*384/64 = 30 - const uint16_t lut_idxCnProcG7[7][6] = {{30,60,90,120,150,180}, {0,60,90,120,150,180}, - {0,30,90,120,150,180}, {0,30,60,120,150,180}, - {0,30,60,90,150,180}, {0,30,60,90,120,180}, - {0,30,60,90,120,150}}; + const uint16_t lut_idxCnProcG7[7][6] = {{60,120,180,240,300,360}, {0,120,180,240,300,360}, + {0,60,180,240,300,360}, {0,60,120,240,300,360}, + {0,60,120,180,300,360}, {0,60,120,180,240,360}, + {0,60,120,180,240,300}}; if (lut_numCnInCnGroups[4] > 0) { // Number of groups of 64 CNs for parallel processing // Ceil for values not divisible by 64 - M = (lut_numCnInCnGroups[4]*Z + 63)>>5; + M = (lut_numCnInCnGroups[4]*Z + 63)>>6; // Set the offset to each bit within a group in terms of 64 Byte - bitOffsetInGroup = (lut_numCnInCnGroups_BG1_R13[4]*NR_LDPC_ZMAX)>>5; + bitOffsetInGroup = (lut_numCnInCnGroups_BG1_R13[4]*NR_LDPC_ZMAX)>>6; // Set pointers to start of group 4 @@ -385,31 +373,30 @@ void nrLDPC_cnProc_BG1_generator_AVX512(uint16_t Z,int R) 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[4]>>5)+lut_idxCnProcG7[j][0]); - // sgn = _mm512_sign_epi16(ones, zmm0); - fprintf(fd," sgn = _mm512_sign_epi16(ones, zmm0);\n"); + fprintf(fd," sgn= ((__m512i*)cnProcBuf)[%d+i];\n",(lut_startAddrCnGroups[4]>>6)+lut_idxCnProcG7[j][0]/2); + // sgn = _mm512_sign_epi816(ones, zmm0); // min = _mm512_abs_epi8(zmm0); - fprintf(fd," min = _mm512_abs_epi8(zmm0);\n"); + fprintf(fd," min = _mm512_abs_epi8(sgn);\n"); // Loop over BNs for (k=1; k<6; k++) { - fprintf(fd," zmm0 = ((__m512i*)cnProcBuf)[%d+i];\n",(lut_startAddrCnGroups[4]>>5)+lut_idxCnProcG7[j][k]); + fprintf(fd," zmm0 = ((__m512i*)cnProcBuf)[%d+i];\n",(lut_startAddrCnGroups[4]>>6)+lut_idxCnProcG7[j][k]/2); // 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"); + // sgn = _mm512_sign_epi8(sgn, zmm0); + fprintf(fd," sgn = _mm512_xor_si512(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 = _mm512_sign_epi8(min, sgn); // p_cnProcBufResBit++; - fprintf(fd," ((__m512i*)cnProcBufRes)[%d+i] = _mm512_sign_epi16(min, sgn);\n",(lut_startAddrCnGroups[4]>>5)+(j*bitOffsetInGroup)); + fprintf(fd," ((__m512i*)cnProcBufRes)[%d+i] = conditional_negate(min, sgn,zeros);\n",(lut_startAddrCnGroups[4]>>6)+(j*bitOffsetInGroup)); fprintf(fd," }\n"); } } @@ -419,10 +406,10 @@ void nrLDPC_cnProc_BG1_generator_AVX512(uint16_t Z,int R) // 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,56,72,84}, {0,24,36,48,56,72,84}, - {0,12,36,48,56,72,84}, {0,12,24,48,56,72,84}, - {0,12,24,36,56,72,84}, {0,12,24,36,48,72,84}, - {0,12,24,36,48,56,84}, {0,12,24,36,48,120,72}}; + const uint8_t lut_idxCnProcG8[8][7] = {{24,48,72,96,112,144,168}, {0,48,72,96,112,144,168}, + {0,24,72,96,112,144,168}, {0,24,48,96,112,144,168}, + {0,24,48,72,112,144,168}, {0,24,48,72,96,144,168}, + {0,24,48,72,96,112,168}, {0,24,48,72,96,112,144}}; @@ -430,10 +417,10 @@ void nrLDPC_cnProc_BG1_generator_AVX512(uint16_t Z,int R) { // Number of groups of 64 CNs for parallel processing // Ceil for values not divisible by 64 - M = (lut_numCnInCnGroups[5]*Z + 63)>>5; + M = (lut_numCnInCnGroups[5]*Z + 63)>>6; // Set the offset to each bit within a group in terms of 64 Byte - bitOffsetInGroup = (lut_numCnInCnGroups_BG1_R13[5]*NR_LDPC_ZMAX)>>5; + bitOffsetInGroup = (lut_numCnInCnGroups_BG1_R13[5]*NR_LDPC_ZMAX)>>6; // Set pointers to start of group 4 @@ -453,31 +440,30 @@ void nrLDPC_cnProc_BG1_generator_AVX512(uint16_t Z,int R) 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"); + fprintf(fd," sgn = ((__m512i*)cnProcBuf)[%d+i];\n",(lut_startAddrCnGroups[5]>>6)+lut_idxCnProcG8[j][0]/2); + // sgn = _mm512_sign_epi8(ones, zmm0); // min = _mm512_abs_epi8(zmm0); - fprintf(fd," min = _mm512_abs_epi8(zmm0);\n"); + fprintf(fd," min = _mm512_abs_epi8(sgn);\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]); + fprintf(fd," zmm0 = ((__m512i*)cnProcBuf)[%d+i];\n",(lut_startAddrCnGroups[5]>>6)+lut_idxCnProcG8[j][k]/2); // 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"); + // sgn = _mm512_sign_epi8(sgn, zmm0); + fprintf(fd," sgn = _mm512_xor_si512(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 = _mm512_sign_epi8(min, sgn); // p_cnProcBufResBit++; - fprintf(fd," ((__m512i*)cnProcBufRes)[%d+i] = _mm512_sign_epi16(min, sgn);\n",(lut_startAddrCnGroups[5]>>5)+(j*bitOffsetInGroup)); + fprintf(fd," ((__m512i*)cnProcBufRes)[%d+i] = conditional_negate(min, sgn,zeros);\n",(lut_startAddrCnGroups[5]>>6)+(j*bitOffsetInGroup)); fprintf(fd," }\n"); } } @@ -486,11 +472,11 @@ void nrLDPC_cnProc_BG1_generator_AVX512(uint16_t Z,int R) // Process group with 9 BNs fprintf(fd,"//Process group with 9 BNs\n"); // Offset is 2*384/64 = 12 - const uint8_t lut_idxCnProcG9[9][8] = {{12,24,36,48,60,72,84,96}, {0,24,36,48,60,72,84,96}, - {0,12,36,48,60,72,84,96}, {0,12,24,48,60,72,84,96}, - {0,12,24,36,60,72,84,96}, {0,12,24,36,48,72,84,96}, - {0,12,24,36,48,60,84,96}, {0,12,24,36,48,60,72,96}, - {0,12,24,36,48,60,72,84}}; + const uint8_t lut_idxCnProcG9[9][8] = {{24,48,72,96,120,144,168,192}, {0,48,72,96,120,144,168,192}, + {0,24,72,96,120,144,168,192}, {0,24,48,96,120,144,168,192}, + {0,24,48,72,120,144,168,192}, {0,24,48,72,96,144,168,192}, + {0,24,48,72,96,120,168,192}, {0,24,48,72,96,120,144,192}, + {0,24,48,72,96,120,144,168}}; @@ -499,10 +485,10 @@ void nrLDPC_cnProc_BG1_generator_AVX512(uint16_t Z,int R) { // Number of groups of 64 CNs for parallel processing // Ceil for values not divisible by 64 - M = (lut_numCnInCnGroups[6]*Z + 63)>>5; + M = (lut_numCnInCnGroups[6]*Z + 63)>>6; // Set the offset to each bit within a group in terms of 64 Byte - bitOffsetInGroup = (lut_numCnInCnGroups_BG1_R13[6]*NR_LDPC_ZMAX)>>5; + bitOffsetInGroup = (lut_numCnInCnGroups_BG1_R13[6]*NR_LDPC_ZMAX)>>6; // Set pointers to start of group 9 @@ -522,31 +508,30 @@ void nrLDPC_cnProc_BG1_generator_AVX512(uint16_t Z,int R) 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[6]>>5)+lut_idxCnProcG9[j][0]); - // sgn = _mm512_sign_epi16(ones, zmm0); - fprintf(fd," sgn = _mm512_sign_epi16(ones, zmm0);\n"); + fprintf(fd," sgn = ((__m512i*)cnProcBuf)[%d+i];\n",(lut_startAddrCnGroups[6]>>6)+lut_idxCnProcG9[j][0]/2); + // sgn = _mm512_sign_epi8(ones, zmm0); // min = _mm512_abs_epi8(zmm0); - fprintf(fd," min = _mm512_abs_epi8(zmm0);\n"); + fprintf(fd," min = _mm512_abs_epi8(sgn);\n"); // Loop over BNs for (k=1; k<8; k++) { - fprintf(fd," zmm0 = ((__m512i*)cnProcBuf)[%d+i];\n",(lut_startAddrCnGroups[6]>>5)+lut_idxCnProcG9[j][k]); + fprintf(fd," zmm0 = ((__m512i*)cnProcBuf)[%d+i];\n",(lut_startAddrCnGroups[6]>>6)+lut_idxCnProcG9[j][k]/2); // 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"); + // sgn = _mm512_sign_epi8(sgn, zmm0); + fprintf(fd," sgn = _mm512_xor_si512(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 = _mm512_sign_epi8(min, sgn); // p_cnProcBufResBit++; - fprintf(fd," ((__m512i*)cnProcBufRes)[%d+i] = _mm512_sign_epi16(min, sgn);\n",(lut_startAddrCnGroups[6]>>5)+(j*bitOffsetInGroup)); + fprintf(fd," ((__m512i*)cnProcBufRes)[%d+i] = conditional_negate(min, sgn, zeros);\n",(lut_startAddrCnGroups[6]>>6)+(j*bitOffsetInGroup)); fprintf(fd," }\n"); } } @@ -555,11 +540,12 @@ void nrLDPC_cnProc_BG1_generator_AVX512(uint16_t Z,int R) // Process group with 10 BNs fprintf(fd,"//Process group with 10 BNs\n"); // Offset is 1*384/64 = 6 - const uint8_t lut_idxCnProcG10[10][9] = {{6,12,18,24,30,36,42,48,54}, {0,12,18,24,30,36,42,48,54}, - {0,6,18,24,30,36,42,48,54}, {0,6,12,24,30,36,42,48,54}, - {0,6,12,18,30,36,42,48,54}, {0,6,12,18,24,36,42,48,54}, - {0,6,12,18,24,30,42,48,54}, {0,6,12,18,24,30,36,48,54}, - {0,6,12,18,24,30,36,42,54}, {0,6,12,36,24,30,36,42,48}}; + 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,72,84,96}}; + @@ -569,10 +555,10 @@ void nrLDPC_cnProc_BG1_generator_AVX512(uint16_t Z,int R) { // Number of groups of 64 CNs for parallel processing // Ceil for values not divisible by 64 - M = (lut_numCnInCnGroups[7]*Z + 63)>>5; + M = (lut_numCnInCnGroups[7]*Z + 63)>>6; // Set the offset to each bit within a group in terms of 64 Byte - bitOffsetInGroup = (lut_numCnInCnGroups_BG1_R13[7]*NR_LDPC_ZMAX)>>5; + bitOffsetInGroup = (lut_numCnInCnGroups_BG1_R13[7]*NR_LDPC_ZMAX)>>6; // Set pointers to start of group 10 @@ -592,31 +578,30 @@ void nrLDPC_cnProc_BG1_generator_AVX512(uint16_t Z,int R) 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"); + fprintf(fd," sgn = ((__m512i*)cnProcBuf)[%d+i];\n",(lut_startAddrCnGroups[7]>>6)+lut_idxCnProcG10[j][0]/2); + // sgn = _mm512_sign_epi8(ones, zmm0); // min = _mm512_abs_epi8(zmm0); - fprintf(fd," min = _mm512_abs_epi8(zmm0);\n"); + fprintf(fd," min = _mm512_abs_epi8(sgn);\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]); + fprintf(fd," zmm0 = ((__m512i*)cnProcBuf)[%d+i];\n",(lut_startAddrCnGroups[7]>>6)+lut_idxCnProcG10[j][k]/2); // 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"); + // sgn = _mm512_sign_epi8(sgn, zmm0); + fprintf(fd," sgn = _mm512_xor_si512(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 = _mm512_sign_epi8(min, sgn); // p_cnProcBufResBit++; - fprintf(fd," ((__m512i*)cnProcBufRes)[%d+i] = _mm512_sign_epi16(min, sgn);\n",(lut_startAddrCnGroups[7]>>5)+(j*bitOffsetInGroup)); + fprintf(fd," ((__m512i*)cnProcBufRes)[%d+i] = conditional_negate(min,sgn,zeros);\n",(lut_startAddrCnGroups[7]>>6)+(j*bitOffsetInGroup)); fprintf(fd," }\n"); } } @@ -626,26 +611,26 @@ void nrLDPC_cnProc_BG1_generator_AVX512(uint16_t Z,int R) // Process group with 19 BNs fprintf(fd,"//Process group with 19 BNs\n"); // Offset is 4*384/64 = 24 - const uint16_t lut_idxCnProcG19[19][18] = {{24,48,72,96,120,144,168,192,216,240,264,288,312,336,360,384,408,432}, {0,48,72,96,120,144,168,192,216,240,264,288,312,336,360,384,408,432}, - {0,24,72,96,120,144,168,192,216,240,264,288,312,336,360,384,408,432}, {0,24,48,96,120,144,168,192,216,240,264,288,312,336,360,384,408,432}, - {0,24,48,72,120,144,168,192,216,240,264,288,312,336,360,384,408,432}, {0,24,48,72,96,144,168,192,216,240,264,288,312,336,360,384,408,432}, - {0,24,48,72,96,120,168,192,216,240,264,288,312,336,360,384,408,432}, {0,24,48,72,96,120,144,192,216,240,264,288,312,336,360,384,408,432}, - {0,24,48,72,96,120,144,168,216,240,264,288,312,336,360,384,408,432}, {0,24,48,72,96,120,144,168,192,240,264,288,312,336,360,384,408,432}, - {0,24,48,72,96,120,144,168,192,216,264,288,312,336,360,384,408,432}, {0,24,48,72,96,120,144,168,192,216,240,288,312,336,360,384,408,432}, - {0,24,48,72,96,120,144,168,192,216,240,264,312,336,360,384,408,432}, {0,24,48,72,96,120,144,168,192,216,240,264,288,336,360,384,408,432}, - {0,24,48,72,96,120,144,168,192,216,240,264,288,312,360,384,408,432}, {0,24,48,72,96,120,144,168,192,216,240,264,288,312,336,384,408,432}, - {0,24,48,72,96,120,144,168,192,216,240,264,288,312,336,360,408,432}, {0,24,48,72,96,120,144,168,192,216,240,264,288,312,336,360,384,432}, - {0,24,48,72,96,120,144,168,192,216,240,264,288,312,336,360,384,408}}; + const uint16_t lut_idxCnProcG19[19][18] = {{48,96,144,192,240,288,336,384,432,480,528,576,624,672,720,768,816,864}, {0,96,144,192,240,288,336,384,432,480,528,576,624,672,720,768,816,864}, + {0,48,144,192,240,288,336,384,432,480,528,576,624,672,720,768,816,864}, {0,48,96,192,240,288,336,384,432,480,528,576,624,672,720,768,816,864}, + {0,48,96,144,240,288,336,384,432,480,528,576,624,672,720,768,816,864}, {0,48,96,144,192,288,336,384,432,480,528,576,624,672,720,768,816,864}, + {0,48,96,144,192,240,336,384,432,480,528,576,624,672,720,768,816,864}, {0,48,96,144,192,240,288,384,432,480,528,576,624,672,720,768,816,864}, + {0,48,96,144,192,240,288,336,432,480,528,576,624,672,720,768,816,864}, {0,48,96,144,192,240,288,336,384,480,528,576,624,672,720,768,816,864}, + {0,48,96,144,192,240,288,336,384,432,528,576,624,672,720,768,816,864}, {0,48,96,144,192,240,288,336,384,432,480,576,624,672,720,768,816,864}, + {0,48,96,144,192,240,288,336,384,432,480,528,624,672,720,768,816,864}, {0,48,96,144,192,240,288,336,384,432,480,528,576,672,720,768,816,864}, + {0,48,96,144,192,240,288,336,384,432,480,528,576,624,720,768,816,864}, {0,48,96,144,192,240,288,336,384,432,480,528,576,624,672,768,816,864}, + {0,48,96,144,192,240,288,336,384,432,480,528,576,624,672,720,816,864}, {0,48,96,144,192,240,288,336,384,432,480,528,576,624,672,720,768,864}, + {0,48,96,144,192,240,288,336,384,432,480,528,576,624,672,720,768,816}}; if (lut_numCnInCnGroups[8] > 0) { // Number of groups of 64 CNs for parallel processing // Ceil for values not divisible by 64 - M = (lut_numCnInCnGroups[8]*Z + 63)>>5; + M = (lut_numCnInCnGroups[8]*Z + 63)>>6; // Set the offset to each bit within a group in terms of 64 Byte - bitOffsetInGroup = (lut_numCnInCnGroups_BG1_R13[8]*NR_LDPC_ZMAX)>>5; + bitOffsetInGroup = (lut_numCnInCnGroups_BG1_R13[8]*NR_LDPC_ZMAX)>>6; // Set pointers to start of group 19 @@ -665,31 +650,30 @@ void nrLDPC_cnProc_BG1_generator_AVX512(uint16_t Z,int R) 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[8]>>5)+lut_idxCnProcG19[j][0]); - // sgn = _mm512_sign_epi16(ones, zmm0); - fprintf(fd," sgn = _mm512_sign_epi16(ones, zmm0);\n"); + fprintf(fd," sgn = ((__m512i*)cnProcBuf)[%d+i];\n",(lut_startAddrCnGroups[8]>>6)+lut_idxCnProcG19[j][0]/2); + // sgn = _mm512_sign_epi8(ones, zmm0); // min = _mm512_abs_epi8(zmm0); - fprintf(fd," min = _mm512_abs_epi8(zmm0);\n"); + fprintf(fd," min = _mm512_abs_epi8(sgn);\n"); // Loop over BNs for (k=1; k<18; k++) { - fprintf(fd," zmm0 = ((__m512i*)cnProcBuf)[%d+i];\n",(lut_startAddrCnGroups[8]>>5)+lut_idxCnProcG19[j][k]); + fprintf(fd," zmm0 = ((__m512i*)cnProcBuf)[%d+i];\n",(lut_startAddrCnGroups[8]>>6)+lut_idxCnProcG19[j][k]/2); // 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"); + // sgn = _mm512_sign_epi8(sgn, zmm0); + fprintf(fd," sgn = _mm512_xor_si512(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 = _mm512_sign_epi8(min, sgn); // p_cnProcBufResBit++; - fprintf(fd," ((__m512i*)cnProcBufRes)[%d+i] = _mm512_sign_epi16(min, sgn);\n",(lut_startAddrCnGroups[8]>>5)+(j*bitOffsetInGroup)); + fprintf(fd," ((__m512i*)cnProcBufRes)[%d+i] = conditional_negate(min, sgn,zeros);\n",(lut_startAddrCnGroups[8]>>6)+(j*bitOffsetInGroup)); fprintf(fd," }\n"); } } diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_avx512/cnProc_gen_BG2_avx512.c b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_avx512/cnProc_gen_BG2_avx512.c index 282cede4d6..405df50beb 100644 --- a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_avx512/cnProc_gen_BG2_avx512.c +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/generator_avx512/cnProc_gen_BG2_avx512.c @@ -1,8 +1,7 @@ +#include #include -#include #include "../../nrLDPCdecoder_defs.h" -#include "../../nrLDPC_types.h" -#include "../../nrLDPC_bnProc.h" + void nrLDPC_cnProc_BG2_generator_AVX512(uint16_t Z,int R) { 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 776516a4d7..c7dfcb1bc5 100755 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 be52b9698c..d9be56dde1 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 @@ -1,9 +1,6 @@ #include -#include -#include "../../nrLDPC_types.h" -#include "../../nrLDPC_init.h" -#include "../../nrLDPC_bnProc.h" +#include #define NB_Z 51 void nrLDPC_cnProc_BG1_generator_AVX512(uint16_t,int); void nrLDPC_cnProc_BG2_generator_AVX512(uint16_t,int); diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z104_13_AVX512.c b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z104_13_AVX512.c index a80f3fb280..7090e88659 100644 --- a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z104_13_AVX512.c +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z104_13_AVX512.c @@ -1,2340 +1,2261 @@ #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; -} +#define conditional_negate(a,b,z) _mm512_mask_sub_epi8(a,_mm512_movepi8_mask(b),z,a) void nrLDPC_cnProc_BG1_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); + __m512i zmm0, min, sgn,zeros,maxLLR; + zeros = _mm512_setzero_si512(); maxLLR = _mm512_set1_epi8((char)127); - for (int i=0;i<5;i+=2) { - zmm0 = ((__m512i*)cnProcBuf)[6+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + for (int i=0;i<2;i+=2) { + sgn = ((__m512i*)cnProcBuf)[6+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[12+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[0+i] = _mm512_sign_epi16(min, sgn); - zmm0 = ((__m512i*)cnProcBuf)[7+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + ((__m512i*)cnProcBufRes)[0+i] = conditional_negate(min, sgn,zeros); + sgn = ((__m512i*)cnProcBuf)[7+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[13+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<5;i+=2) { - zmm0 = ((__m512i*)cnProcBuf)[0+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + for (int i=0;i<2;i+=2) { + sgn = ((__m512i*)cnProcBuf)[0+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[12+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[12+i] = _mm512_sign_epi16(min, sgn); - zmm0 = ((__m512i*)cnProcBuf)[1+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + ((__m512i*)cnProcBufRes)[6+i] = conditional_negate(min, sgn,zeros); + sgn = ((__m512i*)cnProcBuf)[1+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[13+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[13+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[7+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<5;i+=2) { - zmm0 = ((__m512i*)cnProcBuf)[0+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + for (int i=0;i<2;i+=2) { + sgn = ((__m512i*)cnProcBuf)[0+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[6+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[24+i] = _mm512_sign_epi16(min, sgn); - zmm0 = ((__m512i*)cnProcBuf)[1+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + ((__m512i*)cnProcBufRes)[12+i] = conditional_negate(min, sgn,zeros); + sgn = ((__m512i*)cnProcBuf)[1+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[7+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[25+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[13+i] = conditional_negate(min, sgn,zeros); } //Process group with 4 BNs - for (int i=0;i<18;i++) { - zmm0 = ((__m512i*)cnProcBuf)[66+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[96+i]; + for (int i=0;i<9;i++) { + sgn = ((__m512i*)cnProcBuf)[48+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[78+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[126+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[108+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[36+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[18+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<18;i++) { - zmm0 = ((__m512i*)cnProcBuf)[36+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[96+i]; + for (int i=0;i<9;i++) { + sgn = ((__m512i*)cnProcBuf)[18+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[78+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[126+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[108+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[96+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[48+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<18;i++) { - zmm0 = ((__m512i*)cnProcBuf)[36+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[66+i]; + for (int i=0;i<9;i++) { + sgn = ((__m512i*)cnProcBuf)[18+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[48+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[126+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[108+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[156+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[78+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<18;i++) { - zmm0 = ((__m512i*)cnProcBuf)[36+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[66+i]; + for (int i=0;i<9;i++) { + sgn = ((__m512i*)cnProcBuf)[18+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[48+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[96+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[78+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[216+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[108+i] = conditional_negate(min, sgn,zeros); } //Process group with 5 BNs - for (int i=0;i<60;i++) { - zmm0 = ((__m512i*)cnProcBuf)[384+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + for (int i=0;i<30;i++) { + sgn = ((__m512i*)cnProcBuf)[246+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[276+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[138+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<60;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + for (int i=0;i<30;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[492+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[246+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<60;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[384+i]; + for (int i=0;i<30;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[246+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[708+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[354+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<60;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[384+i]; + for (int i=0;i<30;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[246+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[924+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[462+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<60;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[384+i]; + for (int i=0;i<30;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[246+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1140+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[570+i] = conditional_negate(min, sgn,zeros); } //Process group with 6 BNs - for (int i=0;i<27;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + for (int i=0;i<13;i++) { + sgn = ((__m512i*)cnProcBuf)[726+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1356+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[678+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<27;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + for (int i=0;i<13;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1452+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[726+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<27;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<13;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1548+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[774+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<27;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<13;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1644+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[822+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<27;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<13;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1740+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[870+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<27;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<13;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1836+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[918+i] = conditional_negate(min, sgn,zeros); } //Process group with 7 BNs - for (int i=0;i<18;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + for (int i=0;i<9;i++) { + sgn= ((__m512i*)cnProcBuf)[996+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1932+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[966+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<18;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + for (int i=0;i<9;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1992+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[996+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<18;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<9;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2052+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1026+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<18;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<9;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2112+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1056+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<18;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<9;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2172+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1086+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<18;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<9;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2232+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1116+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<18;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<9;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2292+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1146+i] = conditional_negate(min, sgn,zeros); } //Process group with 8 BNs - for (int i=0;i<8;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[1188+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2352+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1176+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<8;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2376+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1188+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<8;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2400+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1200+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<8;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2424+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1212+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<8;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2448+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1224+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<8;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2472+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1236+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<8;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2496+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1248+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<8;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2472+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2520+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1260+i] = conditional_negate(min, sgn,zeros); } //Process group with 9 BNs - for (int i=0;i<8;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2544+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1272+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<8;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2568+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1284+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<8;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2592+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1296+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<8;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2616+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1308+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<8;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2640+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1320+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<8;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2664+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1332+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<8;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2688+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1344+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<8;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2712+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1356+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<8;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2736+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1368+i] = conditional_negate(min, sgn, zeros); } //Process group with 10 BNs - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1386+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2760+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1380+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2772+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1386+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2784+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1392+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2796+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1398+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2808+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1404+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2820+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1410+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2832+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1416+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2844+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1422+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2856+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1428+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2868+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1434+i] = conditional_negate(min,sgn,zeros); } //Process group with 19 BNs - for (int i=0;i<14;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + for (int i=0;i<7;i++) { + sgn = ((__m512i*)cnProcBuf)[1464+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2880+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1440+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<14;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + for (int i=0;i<7;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2928+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1464+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<14;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<7;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2976+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1488+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<14;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<7;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3024+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1512+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<14;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<7;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3072+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1536+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<14;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<7;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3120+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1560+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<14;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<7;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3168+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1584+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<14;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<7;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3216+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1608+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<14;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<7;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3264+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1632+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<14;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<7;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3312+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1656+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<14;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<7;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3360+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1680+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<14;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<7;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3408+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1704+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<14;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<7;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3456+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1728+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<14;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<7;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3504+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1752+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<14;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<7;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3552+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1776+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<14;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<7;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3600+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1800+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<14;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<7;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3648+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1824+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<14;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<7;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3696+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1848+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<14;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<7;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3744+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1872+i] = conditional_negate(min, sgn,zeros); } } diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z10_13_AVX512.c b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z10_13_AVX512.c index b46f3f2e20..a22fe64e88 100644 --- a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z10_13_AVX512.c +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z10_13_AVX512.c @@ -1,2340 +1,2261 @@ #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; -} +#define conditional_negate(a,b,z) _mm512_mask_sub_epi8(a,_mm512_movepi8_mask(b),z,a) void nrLDPC_cnProc_BG1_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); + __m512i zmm0, min, sgn,zeros,maxLLR; + zeros = _mm512_setzero_si512(); maxLLR = _mm512_set1_epi8((char)127); - for (int i=0;i<2;i+=2) { - zmm0 = ((__m512i*)cnProcBuf)[6+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + for (int i=0;i<1;i+=2) { + sgn = ((__m512i*)cnProcBuf)[6+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[12+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[0+i] = _mm512_sign_epi16(min, sgn); - zmm0 = ((__m512i*)cnProcBuf)[7+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + ((__m512i*)cnProcBufRes)[0+i] = conditional_negate(min, sgn,zeros); + sgn = ((__m512i*)cnProcBuf)[7+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[13+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i+=2) { - zmm0 = ((__m512i*)cnProcBuf)[0+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + for (int i=0;i<1;i+=2) { + sgn = ((__m512i*)cnProcBuf)[0+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[12+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[12+i] = _mm512_sign_epi16(min, sgn); - zmm0 = ((__m512i*)cnProcBuf)[1+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + ((__m512i*)cnProcBufRes)[6+i] = conditional_negate(min, sgn,zeros); + sgn = ((__m512i*)cnProcBuf)[1+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[13+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[13+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[7+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i+=2) { - zmm0 = ((__m512i*)cnProcBuf)[0+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + for (int i=0;i<1;i+=2) { + sgn = ((__m512i*)cnProcBuf)[0+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[6+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[24+i] = _mm512_sign_epi16(min, sgn); - zmm0 = ((__m512i*)cnProcBuf)[1+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + ((__m512i*)cnProcBufRes)[12+i] = conditional_negate(min, sgn,zeros); + sgn = ((__m512i*)cnProcBuf)[1+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[7+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[25+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[13+i] = conditional_negate(min, sgn,zeros); } //Process group with 4 BNs - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[66+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[96+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[48+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[78+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[126+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[108+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[36+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[18+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[36+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[96+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[18+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[78+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[126+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[108+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[96+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[48+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[36+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[66+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[18+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[48+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[126+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[108+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[156+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[78+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[36+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[66+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[18+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[48+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[96+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[78+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[216+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[108+i] = conditional_negate(min, sgn,zeros); } //Process group with 5 BNs - for (int i=0;i<7;i++) { - zmm0 = ((__m512i*)cnProcBuf)[384+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[246+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[276+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[138+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<7;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[492+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[246+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<7;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[384+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[246+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[708+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[354+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<7;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[384+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[246+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[924+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[462+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<7;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[384+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[246+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1140+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[570+i] = conditional_negate(min, sgn,zeros); } //Process group with 6 BNs - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[726+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1356+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[678+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1452+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[726+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1548+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[774+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1644+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[822+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1740+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[870+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1836+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[918+i] = conditional_negate(min, sgn,zeros); } //Process group with 7 BNs - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + for (int i=0;i<1;i++) { + sgn= ((__m512i*)cnProcBuf)[996+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1932+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[966+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + for (int i=0;i<1;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1992+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[996+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<1;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2052+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1026+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<1;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2112+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1056+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<1;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2172+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1086+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<1;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2232+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1116+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<1;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2292+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1146+i] = conditional_negate(min, sgn,zeros); } //Process group with 8 BNs - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1188+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2352+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1176+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2376+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1188+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2400+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1200+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2424+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1212+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2448+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1224+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2472+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1236+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2496+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1248+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2472+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2520+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1260+i] = conditional_negate(min, sgn,zeros); } //Process group with 9 BNs - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2544+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1272+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2568+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1284+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2592+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1296+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2616+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1308+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2640+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1320+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2664+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1332+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2688+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1344+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2712+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1356+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2736+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1368+i] = conditional_negate(min, sgn, zeros); } //Process group with 10 BNs - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1386+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2760+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1380+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2772+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1386+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2784+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1392+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2796+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1398+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2808+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1404+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2820+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1410+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2832+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1416+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2844+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1422+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2856+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1428+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2868+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1434+i] = conditional_negate(min,sgn,zeros); } //Process group with 19 BNs - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1464+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2880+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1440+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2928+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1464+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2976+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1488+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3024+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1512+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3072+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1536+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3120+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1560+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3168+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1584+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3216+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1608+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3264+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1632+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3312+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1656+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3360+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1680+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3408+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1704+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3456+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1728+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3504+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1752+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3552+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1776+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3600+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1800+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3648+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1824+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3696+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1848+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3744+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1872+i] = conditional_negate(min, sgn,zeros); } } diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z112_13_AVX512.c b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z112_13_AVX512.c index 14de356cc0..46af61917a 100644 --- a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z112_13_AVX512.c +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z112_13_AVX512.c @@ -1,2340 +1,2261 @@ #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; -} +#define conditional_negate(a,b,z) _mm512_mask_sub_epi8(a,_mm512_movepi8_mask(b),z,a) void nrLDPC_cnProc_BG1_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); + __m512i zmm0, min, sgn,zeros,maxLLR; + zeros = _mm512_setzero_si512(); maxLLR = _mm512_set1_epi8((char)127); - for (int i=0;i<5;i+=2) { - zmm0 = ((__m512i*)cnProcBuf)[6+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + for (int i=0;i<2;i+=2) { + sgn = ((__m512i*)cnProcBuf)[6+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[12+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[0+i] = _mm512_sign_epi16(min, sgn); - zmm0 = ((__m512i*)cnProcBuf)[7+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + ((__m512i*)cnProcBufRes)[0+i] = conditional_negate(min, sgn,zeros); + sgn = ((__m512i*)cnProcBuf)[7+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[13+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<5;i+=2) { - zmm0 = ((__m512i*)cnProcBuf)[0+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + for (int i=0;i<2;i+=2) { + sgn = ((__m512i*)cnProcBuf)[0+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[12+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[12+i] = _mm512_sign_epi16(min, sgn); - zmm0 = ((__m512i*)cnProcBuf)[1+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + ((__m512i*)cnProcBufRes)[6+i] = conditional_negate(min, sgn,zeros); + sgn = ((__m512i*)cnProcBuf)[1+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[13+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[13+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[7+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<5;i+=2) { - zmm0 = ((__m512i*)cnProcBuf)[0+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + for (int i=0;i<2;i+=2) { + sgn = ((__m512i*)cnProcBuf)[0+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[6+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[24+i] = _mm512_sign_epi16(min, sgn); - zmm0 = ((__m512i*)cnProcBuf)[1+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + ((__m512i*)cnProcBufRes)[12+i] = conditional_negate(min, sgn,zeros); + sgn = ((__m512i*)cnProcBuf)[1+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[7+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[25+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[13+i] = conditional_negate(min, sgn,zeros); } //Process group with 4 BNs - for (int i=0;i<19;i++) { - zmm0 = ((__m512i*)cnProcBuf)[66+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[96+i]; + for (int i=0;i<9;i++) { + sgn = ((__m512i*)cnProcBuf)[48+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[78+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[126+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[108+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[36+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[18+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<19;i++) { - zmm0 = ((__m512i*)cnProcBuf)[36+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[96+i]; + for (int i=0;i<9;i++) { + sgn = ((__m512i*)cnProcBuf)[18+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[78+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[126+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[108+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[96+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[48+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<19;i++) { - zmm0 = ((__m512i*)cnProcBuf)[36+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[66+i]; + for (int i=0;i<9;i++) { + sgn = ((__m512i*)cnProcBuf)[18+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[48+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[126+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[108+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[156+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[78+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<19;i++) { - zmm0 = ((__m512i*)cnProcBuf)[36+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[66+i]; + for (int i=0;i<9;i++) { + sgn = ((__m512i*)cnProcBuf)[18+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[48+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[96+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[78+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[216+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[108+i] = conditional_negate(min, sgn,zeros); } //Process group with 5 BNs - for (int i=0;i<64;i++) { - zmm0 = ((__m512i*)cnProcBuf)[384+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + for (int i=0;i<32;i++) { + sgn = ((__m512i*)cnProcBuf)[246+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[276+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[138+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<64;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + for (int i=0;i<32;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[492+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[246+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<64;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[384+i]; + for (int i=0;i<32;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[246+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[708+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[354+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<64;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[384+i]; + for (int i=0;i<32;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[246+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[924+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[462+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<64;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[384+i]; + for (int i=0;i<32;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[246+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1140+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[570+i] = conditional_negate(min, sgn,zeros); } //Process group with 6 BNs - for (int i=0;i<29;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + for (int i=0;i<14;i++) { + sgn = ((__m512i*)cnProcBuf)[726+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1356+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[678+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<29;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + for (int i=0;i<14;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1452+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[726+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<29;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<14;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1548+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[774+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<29;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<14;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1644+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[822+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<29;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<14;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1740+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[870+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<29;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<14;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1836+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[918+i] = conditional_negate(min, sgn,zeros); } //Process group with 7 BNs - for (int i=0;i<19;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + for (int i=0;i<9;i++) { + sgn= ((__m512i*)cnProcBuf)[996+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1932+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[966+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<19;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + for (int i=0;i<9;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1992+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[996+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<19;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<9;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2052+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1026+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<19;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<9;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2112+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1056+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<19;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<9;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2172+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1086+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<19;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<9;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2232+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1116+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<19;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<9;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2292+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1146+i] = conditional_negate(min, sgn,zeros); } //Process group with 8 BNs - for (int i=0;i<8;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[1188+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2352+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1176+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<8;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2376+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1188+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<8;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2400+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1200+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<8;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2424+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1212+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<8;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2448+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1224+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<8;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2472+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1236+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<8;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2496+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1248+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<8;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2472+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2520+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1260+i] = conditional_negate(min, sgn,zeros); } //Process group with 9 BNs - for (int i=0;i<8;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2544+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1272+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<8;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2568+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1284+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<8;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2592+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1296+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<8;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2616+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1308+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<8;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2640+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1320+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<8;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2664+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1332+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<8;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2688+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1344+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<8;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2712+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1356+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<8;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2736+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1368+i] = conditional_negate(min, sgn, zeros); } //Process group with 10 BNs - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1386+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2760+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1380+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2772+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1386+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2784+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1392+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2796+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1398+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2808+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1404+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2820+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1410+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2832+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1416+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2844+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1422+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2856+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1428+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2868+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1434+i] = conditional_negate(min,sgn,zeros); } //Process group with 19 BNs - for (int i=0;i<15;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + for (int i=0;i<7;i++) { + sgn = ((__m512i*)cnProcBuf)[1464+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2880+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1440+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<15;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + for (int i=0;i<7;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2928+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1464+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<15;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<7;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2976+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1488+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<15;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<7;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3024+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1512+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<15;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<7;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3072+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1536+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<15;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<7;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3120+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1560+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<15;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<7;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3168+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1584+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<15;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<7;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3216+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1608+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<15;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<7;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3264+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1632+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<15;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<7;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3312+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1656+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<15;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<7;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3360+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1680+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<15;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<7;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3408+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1704+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<15;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<7;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3456+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1728+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<15;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<7;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3504+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1752+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<15;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<7;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3552+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1776+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<15;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<7;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3600+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1800+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<15;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<7;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3648+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1824+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<15;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<7;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3696+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1848+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<15;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<7;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3744+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1872+i] = conditional_negate(min, sgn,zeros); } } diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z11_13_AVX512.c b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z11_13_AVX512.c index aeba3ddd1f..6db79c76db 100644 --- a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z11_13_AVX512.c +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z11_13_AVX512.c @@ -1,2340 +1,2261 @@ #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; -} +#define conditional_negate(a,b,z) _mm512_mask_sub_epi8(a,_mm512_movepi8_mask(b),z,a) void nrLDPC_cnProc_BG1_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); + __m512i zmm0, min, sgn,zeros,maxLLR; + zeros = _mm512_setzero_si512(); maxLLR = _mm512_set1_epi8((char)127); - for (int i=0;i<2;i+=2) { - zmm0 = ((__m512i*)cnProcBuf)[6+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + for (int i=0;i<1;i+=2) { + sgn = ((__m512i*)cnProcBuf)[6+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[12+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[0+i] = _mm512_sign_epi16(min, sgn); - zmm0 = ((__m512i*)cnProcBuf)[7+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + ((__m512i*)cnProcBufRes)[0+i] = conditional_negate(min, sgn,zeros); + sgn = ((__m512i*)cnProcBuf)[7+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[13+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i+=2) { - zmm0 = ((__m512i*)cnProcBuf)[0+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + for (int i=0;i<1;i+=2) { + sgn = ((__m512i*)cnProcBuf)[0+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[12+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[12+i] = _mm512_sign_epi16(min, sgn); - zmm0 = ((__m512i*)cnProcBuf)[1+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + ((__m512i*)cnProcBufRes)[6+i] = conditional_negate(min, sgn,zeros); + sgn = ((__m512i*)cnProcBuf)[1+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[13+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[13+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[7+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i+=2) { - zmm0 = ((__m512i*)cnProcBuf)[0+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + for (int i=0;i<1;i+=2) { + sgn = ((__m512i*)cnProcBuf)[0+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[6+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[24+i] = _mm512_sign_epi16(min, sgn); - zmm0 = ((__m512i*)cnProcBuf)[1+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + ((__m512i*)cnProcBufRes)[12+i] = conditional_negate(min, sgn,zeros); + sgn = ((__m512i*)cnProcBuf)[1+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[7+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[25+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[13+i] = conditional_negate(min, sgn,zeros); } //Process group with 4 BNs - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[66+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[96+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[48+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[78+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[126+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[108+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[36+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[18+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[36+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[96+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[18+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[78+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[126+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[108+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[96+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[48+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[36+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[66+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[18+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[48+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[126+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[108+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[156+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[78+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[36+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[66+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[18+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[48+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[96+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[78+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[216+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[108+i] = conditional_negate(min, sgn,zeros); } //Process group with 5 BNs - for (int i=0;i<8;i++) { - zmm0 = ((__m512i*)cnProcBuf)[384+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[246+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[276+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[138+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<8;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[492+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[246+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<8;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[384+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[246+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[708+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[354+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<8;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[384+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[246+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[924+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[462+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<8;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[384+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[246+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1140+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[570+i] = conditional_negate(min, sgn,zeros); } //Process group with 6 BNs - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[726+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1356+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[678+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1452+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[726+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1548+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[774+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1644+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[822+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1740+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[870+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1836+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[918+i] = conditional_negate(min, sgn,zeros); } //Process group with 7 BNs - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + for (int i=0;i<1;i++) { + sgn= ((__m512i*)cnProcBuf)[996+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1932+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[966+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + for (int i=0;i<1;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1992+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[996+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<1;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2052+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1026+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<1;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2112+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1056+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<1;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2172+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1086+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<1;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2232+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1116+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<1;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2292+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1146+i] = conditional_negate(min, sgn,zeros); } //Process group with 8 BNs - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1188+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2352+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1176+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2376+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1188+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2400+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1200+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2424+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1212+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2448+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1224+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2472+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1236+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2496+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1248+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2472+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2520+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1260+i] = conditional_negate(min, sgn,zeros); } //Process group with 9 BNs - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2544+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1272+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2568+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1284+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2592+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1296+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2616+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1308+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2640+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1320+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2664+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1332+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2688+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1344+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2712+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1356+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2736+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1368+i] = conditional_negate(min, sgn, zeros); } //Process group with 10 BNs - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1386+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2760+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1380+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2772+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1386+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2784+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1392+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2796+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1398+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2808+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1404+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2820+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1410+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2832+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1416+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2844+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1422+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2856+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1428+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2868+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1434+i] = conditional_negate(min,sgn,zeros); } //Process group with 19 BNs - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1464+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2880+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1440+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2928+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1464+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2976+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1488+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3024+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1512+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3072+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1536+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3120+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1560+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3168+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1584+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3216+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1608+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3264+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1632+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3312+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1656+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3360+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1680+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3408+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1704+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3456+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1728+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3504+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1752+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3552+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1776+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3600+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1800+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3648+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1824+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3696+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1848+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3744+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1872+i] = conditional_negate(min, sgn,zeros); } } diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z120_13_AVX512.c b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z120_13_AVX512.c index 71bc1db2bd..0422bb7415 100644 --- a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z120_13_AVX512.c +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z120_13_AVX512.c @@ -1,2340 +1,2261 @@ #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; -} +#define conditional_negate(a,b,z) _mm512_mask_sub_epi8(a,_mm512_movepi8_mask(b),z,a) void nrLDPC_cnProc_BG1_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); + __m512i zmm0, min, sgn,zeros,maxLLR; + zeros = _mm512_setzero_si512(); maxLLR = _mm512_set1_epi8((char)127); - for (int i=0;i<5;i+=2) { - zmm0 = ((__m512i*)cnProcBuf)[6+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + for (int i=0;i<2;i+=2) { + sgn = ((__m512i*)cnProcBuf)[6+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[12+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[0+i] = _mm512_sign_epi16(min, sgn); - zmm0 = ((__m512i*)cnProcBuf)[7+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + ((__m512i*)cnProcBufRes)[0+i] = conditional_negate(min, sgn,zeros); + sgn = ((__m512i*)cnProcBuf)[7+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[13+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<5;i+=2) { - zmm0 = ((__m512i*)cnProcBuf)[0+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + for (int i=0;i<2;i+=2) { + sgn = ((__m512i*)cnProcBuf)[0+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[12+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[12+i] = _mm512_sign_epi16(min, sgn); - zmm0 = ((__m512i*)cnProcBuf)[1+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + ((__m512i*)cnProcBufRes)[6+i] = conditional_negate(min, sgn,zeros); + sgn = ((__m512i*)cnProcBuf)[1+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[13+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[13+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[7+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<5;i+=2) { - zmm0 = ((__m512i*)cnProcBuf)[0+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + for (int i=0;i<2;i+=2) { + sgn = ((__m512i*)cnProcBuf)[0+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[6+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[24+i] = _mm512_sign_epi16(min, sgn); - zmm0 = ((__m512i*)cnProcBuf)[1+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + ((__m512i*)cnProcBufRes)[12+i] = conditional_negate(min, sgn,zeros); + sgn = ((__m512i*)cnProcBuf)[1+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[7+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[25+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[13+i] = conditional_negate(min, sgn,zeros); } //Process group with 4 BNs - for (int i=0;i<20;i++) { - zmm0 = ((__m512i*)cnProcBuf)[66+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[96+i]; + for (int i=0;i<10;i++) { + sgn = ((__m512i*)cnProcBuf)[48+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[78+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[126+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[108+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[36+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[18+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<20;i++) { - zmm0 = ((__m512i*)cnProcBuf)[36+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[96+i]; + for (int i=0;i<10;i++) { + sgn = ((__m512i*)cnProcBuf)[18+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[78+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[126+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[108+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[96+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[48+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<20;i++) { - zmm0 = ((__m512i*)cnProcBuf)[36+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[66+i]; + for (int i=0;i<10;i++) { + sgn = ((__m512i*)cnProcBuf)[18+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[48+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[126+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[108+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[156+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[78+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<20;i++) { - zmm0 = ((__m512i*)cnProcBuf)[36+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[66+i]; + for (int i=0;i<10;i++) { + sgn = ((__m512i*)cnProcBuf)[18+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[48+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[96+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[78+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[216+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[108+i] = conditional_negate(min, sgn,zeros); } //Process group with 5 BNs - for (int i=0;i<69;i++) { - zmm0 = ((__m512i*)cnProcBuf)[384+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + for (int i=0;i<34;i++) { + sgn = ((__m512i*)cnProcBuf)[246+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[276+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[138+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<69;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + for (int i=0;i<34;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[492+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[246+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<69;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[384+i]; + for (int i=0;i<34;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[246+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[708+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[354+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<69;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[384+i]; + for (int i=0;i<34;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[246+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[924+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[462+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<69;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[384+i]; + for (int i=0;i<34;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[246+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1140+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[570+i] = conditional_negate(min, sgn,zeros); } //Process group with 6 BNs - for (int i=0;i<31;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + for (int i=0;i<15;i++) { + sgn = ((__m512i*)cnProcBuf)[726+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1356+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[678+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<31;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + for (int i=0;i<15;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1452+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[726+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<31;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<15;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1548+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[774+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<31;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<15;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1644+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[822+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<31;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<15;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1740+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[870+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<31;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<15;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1836+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[918+i] = conditional_negate(min, sgn,zeros); } //Process group with 7 BNs - for (int i=0;i<20;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + for (int i=0;i<10;i++) { + sgn= ((__m512i*)cnProcBuf)[996+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1932+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[966+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<20;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + for (int i=0;i<10;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1992+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[996+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<20;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<10;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2052+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1026+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<20;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<10;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2112+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1056+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<20;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<10;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2172+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1086+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<20;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<10;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2232+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1116+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<20;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<10;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2292+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1146+i] = conditional_negate(min, sgn,zeros); } //Process group with 8 BNs - for (int i=0;i<9;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[1188+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2352+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1176+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<9;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2376+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1188+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<9;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2400+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1200+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<9;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2424+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1212+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<9;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2448+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1224+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<9;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2472+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1236+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<9;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2496+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1248+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<9;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2472+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2520+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1260+i] = conditional_negate(min, sgn,zeros); } //Process group with 9 BNs - for (int i=0;i<9;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2544+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1272+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<9;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2568+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1284+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<9;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2592+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1296+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<9;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2616+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1308+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<9;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2640+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1320+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<9;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2664+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1332+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<9;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2688+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1344+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<9;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2712+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1356+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<9;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2736+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1368+i] = conditional_negate(min, sgn, zeros); } //Process group with 10 BNs - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1386+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2760+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1380+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2772+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1386+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2784+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1392+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2796+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1398+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2808+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1404+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2820+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1410+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2832+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1416+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2844+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1422+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2856+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1428+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2868+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1434+i] = conditional_negate(min,sgn,zeros); } //Process group with 19 BNs - for (int i=0;i<16;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + for (int i=0;i<8;i++) { + sgn = ((__m512i*)cnProcBuf)[1464+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2880+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1440+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<16;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + for (int i=0;i<8;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2928+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1464+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<16;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<8;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2976+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1488+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<16;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<8;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3024+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1512+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<16;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<8;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3072+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1536+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<16;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<8;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3120+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1560+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<16;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<8;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3168+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1584+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<16;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<8;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3216+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1608+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<16;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<8;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3264+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1632+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<16;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<8;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3312+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1656+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<16;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<8;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3360+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1680+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<16;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<8;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3408+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1704+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<16;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<8;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3456+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1728+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<16;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<8;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3504+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1752+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<16;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<8;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3552+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1776+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<16;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<8;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3600+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1800+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<16;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<8;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3648+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1824+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<16;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<8;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3696+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1848+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<16;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<8;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3744+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1872+i] = conditional_negate(min, sgn,zeros); } } diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z128_13_AVX512.c b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z128_13_AVX512.c index 15edfb7647..2bb9a39a86 100644 --- a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z128_13_AVX512.c +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z128_13_AVX512.c @@ -1,2340 +1,2261 @@ #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; -} +#define conditional_negate(a,b,z) _mm512_mask_sub_epi8(a,_mm512_movepi8_mask(b),z,a) void nrLDPC_cnProc_BG1_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); + __m512i zmm0, min, sgn,zeros,maxLLR; + zeros = _mm512_setzero_si512(); maxLLR = _mm512_set1_epi8((char)127); - for (int i=0;i<5;i+=2) { - zmm0 = ((__m512i*)cnProcBuf)[6+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + for (int i=0;i<2;i+=2) { + sgn = ((__m512i*)cnProcBuf)[6+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[12+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[0+i] = _mm512_sign_epi16(min, sgn); - zmm0 = ((__m512i*)cnProcBuf)[7+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + ((__m512i*)cnProcBufRes)[0+i] = conditional_negate(min, sgn,zeros); + sgn = ((__m512i*)cnProcBuf)[7+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[13+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<5;i+=2) { - zmm0 = ((__m512i*)cnProcBuf)[0+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + for (int i=0;i<2;i+=2) { + sgn = ((__m512i*)cnProcBuf)[0+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[12+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[12+i] = _mm512_sign_epi16(min, sgn); - zmm0 = ((__m512i*)cnProcBuf)[1+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + ((__m512i*)cnProcBufRes)[6+i] = conditional_negate(min, sgn,zeros); + sgn = ((__m512i*)cnProcBuf)[1+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[13+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[13+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[7+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<5;i+=2) { - zmm0 = ((__m512i*)cnProcBuf)[0+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + for (int i=0;i<2;i+=2) { + sgn = ((__m512i*)cnProcBuf)[0+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[6+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[24+i] = _mm512_sign_epi16(min, sgn); - zmm0 = ((__m512i*)cnProcBuf)[1+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + ((__m512i*)cnProcBufRes)[12+i] = conditional_negate(min, sgn,zeros); + sgn = ((__m512i*)cnProcBuf)[1+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[7+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[25+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[13+i] = conditional_negate(min, sgn,zeros); } //Process group with 4 BNs - for (int i=0;i<21;i++) { - zmm0 = ((__m512i*)cnProcBuf)[66+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[96+i]; + for (int i=0;i<10;i++) { + sgn = ((__m512i*)cnProcBuf)[48+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[78+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[126+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[108+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[36+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[18+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<21;i++) { - zmm0 = ((__m512i*)cnProcBuf)[36+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[96+i]; + for (int i=0;i<10;i++) { + sgn = ((__m512i*)cnProcBuf)[18+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[78+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[126+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[108+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[96+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[48+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<21;i++) { - zmm0 = ((__m512i*)cnProcBuf)[36+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[66+i]; + for (int i=0;i<10;i++) { + sgn = ((__m512i*)cnProcBuf)[18+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[48+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[126+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[108+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[156+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[78+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<21;i++) { - zmm0 = ((__m512i*)cnProcBuf)[36+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[66+i]; + for (int i=0;i<10;i++) { + sgn = ((__m512i*)cnProcBuf)[18+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[48+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[96+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[78+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[216+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[108+i] = conditional_negate(min, sgn,zeros); } //Process group with 5 BNs - for (int i=0;i<73;i++) { - zmm0 = ((__m512i*)cnProcBuf)[384+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + for (int i=0;i<36;i++) { + sgn = ((__m512i*)cnProcBuf)[246+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[276+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[138+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<73;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + for (int i=0;i<36;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[492+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[246+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<73;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[384+i]; + for (int i=0;i<36;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[246+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[708+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[354+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<73;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[384+i]; + for (int i=0;i<36;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[246+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[924+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[462+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<73;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[384+i]; + for (int i=0;i<36;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[246+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1140+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[570+i] = conditional_negate(min, sgn,zeros); } //Process group with 6 BNs - for (int i=0;i<33;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + for (int i=0;i<16;i++) { + sgn = ((__m512i*)cnProcBuf)[726+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1356+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[678+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<33;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + for (int i=0;i<16;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1452+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[726+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<33;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<16;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1548+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[774+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<33;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<16;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1644+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[822+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<33;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<16;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1740+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[870+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<33;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<16;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1836+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[918+i] = conditional_negate(min, sgn,zeros); } //Process group with 7 BNs - for (int i=0;i<21;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + for (int i=0;i<10;i++) { + sgn= ((__m512i*)cnProcBuf)[996+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1932+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[966+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<21;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + for (int i=0;i<10;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1992+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[996+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<21;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<10;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2052+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1026+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<21;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<10;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2112+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1056+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<21;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<10;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2172+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1086+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<21;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<10;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2232+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1116+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<21;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<10;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2292+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1146+i] = conditional_negate(min, sgn,zeros); } //Process group with 8 BNs - for (int i=0;i<9;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[1188+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2352+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1176+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<9;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2376+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1188+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<9;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2400+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1200+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<9;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2424+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1212+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<9;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2448+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1224+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<9;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2472+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1236+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<9;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2496+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1248+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<9;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2472+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2520+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1260+i] = conditional_negate(min, sgn,zeros); } //Process group with 9 BNs - for (int i=0;i<9;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2544+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1272+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<9;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2568+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1284+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<9;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2592+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1296+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<9;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2616+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1308+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<9;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2640+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1320+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<9;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2664+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1332+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<9;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2688+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1344+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<9;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2712+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1356+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<9;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2736+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1368+i] = conditional_negate(min, sgn, zeros); } //Process group with 10 BNs - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1386+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2760+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1380+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2772+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1386+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2784+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1392+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2796+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1398+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2808+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1404+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2820+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1410+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2832+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1416+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2844+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1422+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2856+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1428+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2868+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1434+i] = conditional_negate(min,sgn,zeros); } //Process group with 19 BNs - for (int i=0;i<17;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + for (int i=0;i<8;i++) { + sgn = ((__m512i*)cnProcBuf)[1464+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2880+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1440+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<17;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + for (int i=0;i<8;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2928+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1464+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<17;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<8;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2976+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1488+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<17;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<8;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3024+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1512+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<17;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<8;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3072+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1536+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<17;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<8;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3120+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1560+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<17;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<8;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3168+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1584+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<17;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<8;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3216+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1608+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<17;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<8;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3264+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1632+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<17;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<8;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3312+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1656+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<17;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<8;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3360+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1680+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<17;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<8;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3408+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1704+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<17;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<8;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3456+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1728+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<17;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<8;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3504+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1752+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<17;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<8;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3552+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1776+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<17;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<8;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3600+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1800+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<17;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<8;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3648+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1824+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<17;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<8;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3696+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1848+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<17;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<8;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3744+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1872+i] = conditional_negate(min, sgn,zeros); } } diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z12_13_AVX512.c b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z12_13_AVX512.c index 09610a25e7..2b2a2e80eb 100644 --- a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z12_13_AVX512.c +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z12_13_AVX512.c @@ -1,2340 +1,2261 @@ #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; -} +#define conditional_negate(a,b,z) _mm512_mask_sub_epi8(a,_mm512_movepi8_mask(b),z,a) void nrLDPC_cnProc_BG1_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); + __m512i zmm0, min, sgn,zeros,maxLLR; + zeros = _mm512_setzero_si512(); maxLLR = _mm512_set1_epi8((char)127); - for (int i=0;i<2;i+=2) { - zmm0 = ((__m512i*)cnProcBuf)[6+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + for (int i=0;i<1;i+=2) { + sgn = ((__m512i*)cnProcBuf)[6+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[12+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[0+i] = _mm512_sign_epi16(min, sgn); - zmm0 = ((__m512i*)cnProcBuf)[7+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + ((__m512i*)cnProcBufRes)[0+i] = conditional_negate(min, sgn,zeros); + sgn = ((__m512i*)cnProcBuf)[7+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[13+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i+=2) { - zmm0 = ((__m512i*)cnProcBuf)[0+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + for (int i=0;i<1;i+=2) { + sgn = ((__m512i*)cnProcBuf)[0+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[12+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[12+i] = _mm512_sign_epi16(min, sgn); - zmm0 = ((__m512i*)cnProcBuf)[1+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + ((__m512i*)cnProcBufRes)[6+i] = conditional_negate(min, sgn,zeros); + sgn = ((__m512i*)cnProcBuf)[1+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[13+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[13+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[7+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i+=2) { - zmm0 = ((__m512i*)cnProcBuf)[0+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + for (int i=0;i<1;i+=2) { + sgn = ((__m512i*)cnProcBuf)[0+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[6+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[24+i] = _mm512_sign_epi16(min, sgn); - zmm0 = ((__m512i*)cnProcBuf)[1+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + ((__m512i*)cnProcBufRes)[12+i] = conditional_negate(min, sgn,zeros); + sgn = ((__m512i*)cnProcBuf)[1+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[7+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[25+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[13+i] = conditional_negate(min, sgn,zeros); } //Process group with 4 BNs - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[66+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[96+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[48+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[78+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[126+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[108+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[36+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[18+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[36+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[96+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[18+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[78+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[126+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[108+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[96+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[48+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[36+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[66+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[18+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[48+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[126+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[108+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[156+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[78+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[36+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[66+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[18+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[48+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[96+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[78+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[216+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[108+i] = conditional_negate(min, sgn,zeros); } //Process group with 5 BNs - for (int i=0;i<8;i++) { - zmm0 = ((__m512i*)cnProcBuf)[384+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[246+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[276+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[138+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<8;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[492+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[246+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<8;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[384+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[246+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[708+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[354+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<8;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[384+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[246+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[924+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[462+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<8;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[384+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[246+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1140+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[570+i] = conditional_negate(min, sgn,zeros); } //Process group with 6 BNs - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[726+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1356+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[678+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1452+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[726+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1548+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[774+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1644+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[822+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1740+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[870+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1836+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[918+i] = conditional_negate(min, sgn,zeros); } //Process group with 7 BNs - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + for (int i=0;i<1;i++) { + sgn= ((__m512i*)cnProcBuf)[996+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1932+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[966+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + for (int i=0;i<1;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1992+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[996+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<1;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2052+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1026+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<1;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2112+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1056+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<1;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2172+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1086+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<1;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2232+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1116+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<1;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2292+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1146+i] = conditional_negate(min, sgn,zeros); } //Process group with 8 BNs - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1188+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2352+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1176+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2376+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1188+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2400+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1200+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2424+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1212+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2448+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1224+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2472+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1236+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2496+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1248+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2472+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2520+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1260+i] = conditional_negate(min, sgn,zeros); } //Process group with 9 BNs - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2544+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1272+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2568+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1284+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2592+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1296+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2616+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1308+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2640+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1320+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2664+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1332+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2688+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1344+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2712+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1356+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2736+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1368+i] = conditional_negate(min, sgn, zeros); } //Process group with 10 BNs - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1386+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2760+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1380+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2772+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1386+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2784+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1392+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2796+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1398+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2808+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1404+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2820+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1410+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2832+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1416+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2844+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1422+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2856+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1428+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2868+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1434+i] = conditional_negate(min,sgn,zeros); } //Process group with 19 BNs - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1464+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2880+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1440+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2928+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1464+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2976+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1488+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3024+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1512+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3072+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1536+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3120+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1560+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3168+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1584+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3216+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1608+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3264+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1632+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3312+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1656+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3360+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1680+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3408+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1704+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3456+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1728+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3504+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1752+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3552+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1776+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3600+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1800+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3648+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1824+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3696+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1848+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3744+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1872+i] = conditional_negate(min, sgn,zeros); } } diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z13_13_AVX512.c b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z13_13_AVX512.c index 96e108ac27..af39ffbbe0 100644 --- a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z13_13_AVX512.c +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z13_13_AVX512.c @@ -1,2340 +1,2261 @@ #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; -} +#define conditional_negate(a,b,z) _mm512_mask_sub_epi8(a,_mm512_movepi8_mask(b),z,a) void nrLDPC_cnProc_BG1_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); + __m512i zmm0, min, sgn,zeros,maxLLR; + zeros = _mm512_setzero_si512(); maxLLR = _mm512_set1_epi8((char)127); - for (int i=0;i<2;i+=2) { - zmm0 = ((__m512i*)cnProcBuf)[6+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + for (int i=0;i<1;i+=2) { + sgn = ((__m512i*)cnProcBuf)[6+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[12+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[0+i] = _mm512_sign_epi16(min, sgn); - zmm0 = ((__m512i*)cnProcBuf)[7+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + ((__m512i*)cnProcBufRes)[0+i] = conditional_negate(min, sgn,zeros); + sgn = ((__m512i*)cnProcBuf)[7+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[13+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i+=2) { - zmm0 = ((__m512i*)cnProcBuf)[0+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + for (int i=0;i<1;i+=2) { + sgn = ((__m512i*)cnProcBuf)[0+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[12+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[12+i] = _mm512_sign_epi16(min, sgn); - zmm0 = ((__m512i*)cnProcBuf)[1+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + ((__m512i*)cnProcBufRes)[6+i] = conditional_negate(min, sgn,zeros); + sgn = ((__m512i*)cnProcBuf)[1+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[13+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[13+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[7+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i+=2) { - zmm0 = ((__m512i*)cnProcBuf)[0+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + for (int i=0;i<1;i+=2) { + sgn = ((__m512i*)cnProcBuf)[0+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[6+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[24+i] = _mm512_sign_epi16(min, sgn); - zmm0 = ((__m512i*)cnProcBuf)[1+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + ((__m512i*)cnProcBufRes)[12+i] = conditional_negate(min, sgn,zeros); + sgn = ((__m512i*)cnProcBuf)[1+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[7+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[25+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[13+i] = conditional_negate(min, sgn,zeros); } //Process group with 4 BNs - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[66+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[96+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[48+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[78+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[126+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[108+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[36+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[18+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[36+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[96+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[18+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[78+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[126+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[108+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[96+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[48+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[36+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[66+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[18+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[48+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[126+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[108+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[156+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[78+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[36+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[66+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[18+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[48+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[96+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[78+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[216+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[108+i] = conditional_negate(min, sgn,zeros); } //Process group with 5 BNs - for (int i=0;i<9;i++) { - zmm0 = ((__m512i*)cnProcBuf)[384+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[246+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[276+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[138+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<9;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[492+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[246+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<9;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[384+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[246+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[708+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[354+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<9;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[384+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[246+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[924+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[462+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<9;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[384+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[246+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1140+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[570+i] = conditional_negate(min, sgn,zeros); } //Process group with 6 BNs - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[726+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1356+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[678+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1452+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[726+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1548+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[774+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1644+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[822+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1740+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[870+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1836+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[918+i] = conditional_negate(min, sgn,zeros); } //Process group with 7 BNs - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + for (int i=0;i<2;i++) { + sgn= ((__m512i*)cnProcBuf)[996+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1932+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[966+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + for (int i=0;i<2;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1992+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[996+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<2;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2052+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1026+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<2;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2112+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1056+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<2;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2172+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1086+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<2;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2232+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1116+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<2;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2292+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1146+i] = conditional_negate(min, sgn,zeros); } //Process group with 8 BNs - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1188+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2352+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1176+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2376+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1188+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2400+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1200+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2424+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1212+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2448+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1224+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2472+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1236+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2496+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1248+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2472+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2520+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1260+i] = conditional_negate(min, sgn,zeros); } //Process group with 9 BNs - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2544+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1272+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2568+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1284+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2592+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1296+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2616+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1308+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2640+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1320+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2664+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1332+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2688+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1344+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2712+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1356+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2736+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1368+i] = conditional_negate(min, sgn, zeros); } //Process group with 10 BNs - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1386+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2760+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1380+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2772+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1386+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2784+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1392+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2796+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1398+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2808+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1404+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2820+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1410+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2832+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1416+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2844+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1422+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2856+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1428+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2868+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1434+i] = conditional_negate(min,sgn,zeros); } //Process group with 19 BNs - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1464+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2880+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1440+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2928+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1464+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2976+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1488+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3024+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1512+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3072+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1536+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3120+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1560+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3168+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1584+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3216+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1608+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3264+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1632+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3312+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1656+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3360+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1680+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3408+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1704+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3456+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1728+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3504+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1752+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3552+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1776+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3600+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1800+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3648+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1824+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3696+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1848+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3744+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1872+i] = conditional_negate(min, sgn,zeros); } } diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z144_13_AVX512.c b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z144_13_AVX512.c index 449becf031..b0caad9435 100644 --- a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z144_13_AVX512.c +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z144_13_AVX512.c @@ -1,2340 +1,2261 @@ #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; -} +#define conditional_negate(a,b,z) _mm512_mask_sub_epi8(a,_mm512_movepi8_mask(b),z,a) void nrLDPC_cnProc_BG1_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); + __m512i zmm0, min, sgn,zeros,maxLLR; + zeros = _mm512_setzero_si512(); maxLLR = _mm512_set1_epi8((char)127); - for (int i=0;i<6;i+=2) { - zmm0 = ((__m512i*)cnProcBuf)[6+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + for (int i=0;i<3;i+=2) { + sgn = ((__m512i*)cnProcBuf)[6+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[12+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[0+i] = _mm512_sign_epi16(min, sgn); - zmm0 = ((__m512i*)cnProcBuf)[7+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + ((__m512i*)cnProcBufRes)[0+i] = conditional_negate(min, sgn,zeros); + sgn = ((__m512i*)cnProcBuf)[7+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[13+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<6;i+=2) { - zmm0 = ((__m512i*)cnProcBuf)[0+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + for (int i=0;i<3;i+=2) { + sgn = ((__m512i*)cnProcBuf)[0+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[12+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[12+i] = _mm512_sign_epi16(min, sgn); - zmm0 = ((__m512i*)cnProcBuf)[1+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + ((__m512i*)cnProcBufRes)[6+i] = conditional_negate(min, sgn,zeros); + sgn = ((__m512i*)cnProcBuf)[1+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[13+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[13+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[7+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<6;i+=2) { - zmm0 = ((__m512i*)cnProcBuf)[0+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + for (int i=0;i<3;i+=2) { + sgn = ((__m512i*)cnProcBuf)[0+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[6+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[24+i] = _mm512_sign_epi16(min, sgn); - zmm0 = ((__m512i*)cnProcBuf)[1+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + ((__m512i*)cnProcBufRes)[12+i] = conditional_negate(min, sgn,zeros); + sgn = ((__m512i*)cnProcBuf)[1+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[7+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[25+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[13+i] = conditional_negate(min, sgn,zeros); } //Process group with 4 BNs - for (int i=0;i<24;i++) { - zmm0 = ((__m512i*)cnProcBuf)[66+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[96+i]; + for (int i=0;i<12;i++) { + sgn = ((__m512i*)cnProcBuf)[48+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[78+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[126+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[108+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[36+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[18+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<24;i++) { - zmm0 = ((__m512i*)cnProcBuf)[36+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[96+i]; + for (int i=0;i<12;i++) { + sgn = ((__m512i*)cnProcBuf)[18+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[78+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[126+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[108+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[96+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[48+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<24;i++) { - zmm0 = ((__m512i*)cnProcBuf)[36+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[66+i]; + for (int i=0;i<12;i++) { + sgn = ((__m512i*)cnProcBuf)[18+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[48+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[126+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[108+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[156+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[78+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<24;i++) { - zmm0 = ((__m512i*)cnProcBuf)[36+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[66+i]; + for (int i=0;i<12;i++) { + sgn = ((__m512i*)cnProcBuf)[18+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[48+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[96+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[78+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[216+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[108+i] = conditional_negate(min, sgn,zeros); } //Process group with 5 BNs - for (int i=0;i<82;i++) { - zmm0 = ((__m512i*)cnProcBuf)[384+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + for (int i=0;i<41;i++) { + sgn = ((__m512i*)cnProcBuf)[246+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[276+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[138+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<82;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + for (int i=0;i<41;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[492+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[246+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<82;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[384+i]; + for (int i=0;i<41;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[246+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[708+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[354+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<82;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[384+i]; + for (int i=0;i<41;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[246+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[924+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[462+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<82;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[384+i]; + for (int i=0;i<41;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[246+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1140+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[570+i] = conditional_negate(min, sgn,zeros); } //Process group with 6 BNs - for (int i=0;i<37;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + for (int i=0;i<18;i++) { + sgn = ((__m512i*)cnProcBuf)[726+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1356+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[678+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<37;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + for (int i=0;i<18;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1452+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[726+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<37;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<18;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1548+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[774+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<37;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<18;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1644+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[822+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<37;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<18;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1740+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[870+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<37;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<18;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1836+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[918+i] = conditional_negate(min, sgn,zeros); } //Process group with 7 BNs - for (int i=0;i<24;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + for (int i=0;i<12;i++) { + sgn= ((__m512i*)cnProcBuf)[996+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1932+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[966+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<24;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + for (int i=0;i<12;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1992+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[996+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<24;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<12;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2052+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1026+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<24;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<12;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2112+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1056+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<24;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<12;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2172+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1086+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<24;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<12;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2232+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1116+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<24;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<12;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2292+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1146+i] = conditional_negate(min, sgn,zeros); } //Process group with 8 BNs - for (int i=0;i<10;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + for (int i=0;i<5;i++) { + sgn = ((__m512i*)cnProcBuf)[1188+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2352+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1176+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<10;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + for (int i=0;i<5;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2376+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1188+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<10;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<5;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2400+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1200+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<10;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<5;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2424+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1212+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<10;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<5;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2448+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1224+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<10;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<5;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2472+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1236+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<10;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<5;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2496+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1248+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<10;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<5;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2472+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2520+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1260+i] = conditional_negate(min, sgn,zeros); } //Process group with 9 BNs - for (int i=0;i<10;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + for (int i=0;i<5;i++) { + sgn = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2544+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1272+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<10;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + for (int i=0;i<5;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2568+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1284+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<10;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<5;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2592+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1296+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<10;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<5;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2616+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1308+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<10;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<5;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2640+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1320+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<10;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<5;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2664+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1332+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<10;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<5;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2688+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1344+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<10;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<5;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2712+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1356+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<10;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<5;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2736+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1368+i] = conditional_negate(min, sgn, zeros); } //Process group with 10 BNs - for (int i=0;i<6;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[1386+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2760+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1380+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<6;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2772+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1386+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<6;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2784+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1392+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<6;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2796+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1398+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<6;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2808+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1404+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<6;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2820+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1410+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<6;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2832+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1416+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<6;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2844+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1422+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<6;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2856+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1428+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<6;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2868+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1434+i] = conditional_negate(min,sgn,zeros); } //Process group with 19 BNs - for (int i=0;i<19;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + for (int i=0;i<9;i++) { + sgn = ((__m512i*)cnProcBuf)[1464+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2880+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1440+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<19;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + for (int i=0;i<9;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2928+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1464+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<19;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<9;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2976+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1488+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<19;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<9;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3024+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1512+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<19;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<9;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3072+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1536+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<19;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<9;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3120+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1560+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<19;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<9;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3168+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1584+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<19;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<9;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3216+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1608+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<19;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<9;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3264+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1632+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<19;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<9;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3312+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1656+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<19;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<9;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3360+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1680+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<19;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<9;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3408+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1704+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<19;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<9;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3456+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1728+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<19;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<9;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3504+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1752+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<19;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<9;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3552+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1776+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<19;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<9;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3600+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1800+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<19;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<9;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3648+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1824+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<19;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<9;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3696+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1848+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<19;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<9;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3744+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1872+i] = conditional_negate(min, sgn,zeros); } } diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z14_13_AVX512.c b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z14_13_AVX512.c index 0145645d66..587dfe323a 100644 --- a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z14_13_AVX512.c +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z14_13_AVX512.c @@ -1,2340 +1,2261 @@ #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; -} +#define conditional_negate(a,b,z) _mm512_mask_sub_epi8(a,_mm512_movepi8_mask(b),z,a) void nrLDPC_cnProc_BG1_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); + __m512i zmm0, min, sgn,zeros,maxLLR; + zeros = _mm512_setzero_si512(); maxLLR = _mm512_set1_epi8((char)127); - for (int i=0;i<2;i+=2) { - zmm0 = ((__m512i*)cnProcBuf)[6+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + for (int i=0;i<1;i+=2) { + sgn = ((__m512i*)cnProcBuf)[6+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[12+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[0+i] = _mm512_sign_epi16(min, sgn); - zmm0 = ((__m512i*)cnProcBuf)[7+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + ((__m512i*)cnProcBufRes)[0+i] = conditional_negate(min, sgn,zeros); + sgn = ((__m512i*)cnProcBuf)[7+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[13+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i+=2) { - zmm0 = ((__m512i*)cnProcBuf)[0+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + for (int i=0;i<1;i+=2) { + sgn = ((__m512i*)cnProcBuf)[0+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[12+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[12+i] = _mm512_sign_epi16(min, sgn); - zmm0 = ((__m512i*)cnProcBuf)[1+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + ((__m512i*)cnProcBufRes)[6+i] = conditional_negate(min, sgn,zeros); + sgn = ((__m512i*)cnProcBuf)[1+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[13+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[13+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[7+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i+=2) { - zmm0 = ((__m512i*)cnProcBuf)[0+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + for (int i=0;i<1;i+=2) { + sgn = ((__m512i*)cnProcBuf)[0+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[6+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[24+i] = _mm512_sign_epi16(min, sgn); - zmm0 = ((__m512i*)cnProcBuf)[1+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + ((__m512i*)cnProcBufRes)[12+i] = conditional_negate(min, sgn,zeros); + sgn = ((__m512i*)cnProcBuf)[1+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[7+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[25+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[13+i] = conditional_negate(min, sgn,zeros); } //Process group with 4 BNs - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[66+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[96+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[48+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[78+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[126+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[108+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[36+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[18+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[36+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[96+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[18+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[78+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[126+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[108+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[96+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[48+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[36+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[66+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[18+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[48+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[126+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[108+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[156+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[78+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[36+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[66+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[18+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[48+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[96+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[78+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[216+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[108+i] = conditional_negate(min, sgn,zeros); } //Process group with 5 BNs - for (int i=0;i<9;i++) { - zmm0 = ((__m512i*)cnProcBuf)[384+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[246+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[276+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[138+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<9;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[492+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[246+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<9;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[384+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[246+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[708+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[354+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<9;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[384+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[246+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[924+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[462+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<9;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[384+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[246+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1140+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[570+i] = conditional_negate(min, sgn,zeros); } //Process group with 6 BNs - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[726+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1356+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[678+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1452+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[726+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1548+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[774+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1644+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[822+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1740+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[870+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1836+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[918+i] = conditional_negate(min, sgn,zeros); } //Process group with 7 BNs - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + for (int i=0;i<2;i++) { + sgn= ((__m512i*)cnProcBuf)[996+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1932+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[966+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + for (int i=0;i<2;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1992+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[996+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<2;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2052+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1026+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<2;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2112+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1056+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<2;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2172+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1086+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<2;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2232+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1116+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<2;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2292+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1146+i] = conditional_negate(min, sgn,zeros); } //Process group with 8 BNs - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1188+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2352+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1176+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2376+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1188+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2400+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1200+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2424+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1212+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2448+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1224+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2472+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1236+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2496+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1248+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2472+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2520+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1260+i] = conditional_negate(min, sgn,zeros); } //Process group with 9 BNs - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2544+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1272+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2568+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1284+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2592+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1296+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2616+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1308+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2640+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1320+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2664+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1332+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2688+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1344+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2712+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1356+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2736+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1368+i] = conditional_negate(min, sgn, zeros); } //Process group with 10 BNs - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1386+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2760+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1380+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2772+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1386+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2784+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1392+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2796+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1398+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2808+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1404+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2820+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1410+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2832+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1416+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2844+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1422+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2856+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1428+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2868+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1434+i] = conditional_negate(min,sgn,zeros); } //Process group with 19 BNs - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1464+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2880+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1440+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2928+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1464+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2976+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1488+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3024+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1512+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3072+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1536+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3120+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1560+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3168+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1584+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3216+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1608+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3264+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1632+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3312+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1656+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3360+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1680+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3408+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1704+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3456+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1728+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3504+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1752+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3552+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1776+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3600+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1800+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3648+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1824+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3696+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1848+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3744+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1872+i] = conditional_negate(min, sgn,zeros); } } diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z15_13_AVX512.c b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z15_13_AVX512.c index c301777ab6..9fc63c424f 100644 --- a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z15_13_AVX512.c +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z15_13_AVX512.c @@ -1,2340 +1,2261 @@ #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; -} +#define conditional_negate(a,b,z) _mm512_mask_sub_epi8(a,_mm512_movepi8_mask(b),z,a) void nrLDPC_cnProc_BG1_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); + __m512i zmm0, min, sgn,zeros,maxLLR; + zeros = _mm512_setzero_si512(); maxLLR = _mm512_set1_epi8((char)127); - for (int i=0;i<2;i+=2) { - zmm0 = ((__m512i*)cnProcBuf)[6+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + for (int i=0;i<1;i+=2) { + sgn = ((__m512i*)cnProcBuf)[6+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[12+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[0+i] = _mm512_sign_epi16(min, sgn); - zmm0 = ((__m512i*)cnProcBuf)[7+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + ((__m512i*)cnProcBufRes)[0+i] = conditional_negate(min, sgn,zeros); + sgn = ((__m512i*)cnProcBuf)[7+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[13+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i+=2) { - zmm0 = ((__m512i*)cnProcBuf)[0+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + for (int i=0;i<1;i+=2) { + sgn = ((__m512i*)cnProcBuf)[0+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[12+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[12+i] = _mm512_sign_epi16(min, sgn); - zmm0 = ((__m512i*)cnProcBuf)[1+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + ((__m512i*)cnProcBufRes)[6+i] = conditional_negate(min, sgn,zeros); + sgn = ((__m512i*)cnProcBuf)[1+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[13+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[13+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[7+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i+=2) { - zmm0 = ((__m512i*)cnProcBuf)[0+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + for (int i=0;i<1;i+=2) { + sgn = ((__m512i*)cnProcBuf)[0+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[6+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[24+i] = _mm512_sign_epi16(min, sgn); - zmm0 = ((__m512i*)cnProcBuf)[1+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + ((__m512i*)cnProcBufRes)[12+i] = conditional_negate(min, sgn,zeros); + sgn = ((__m512i*)cnProcBuf)[1+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[7+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[25+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[13+i] = conditional_negate(min, sgn,zeros); } //Process group with 4 BNs - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[66+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[96+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[48+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[78+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[126+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[108+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[36+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[18+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[36+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[96+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[18+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[78+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[126+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[108+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[96+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[48+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[36+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[66+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[18+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[48+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[126+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[108+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[156+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[78+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[36+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[66+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[18+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[48+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[96+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[78+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[216+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[108+i] = conditional_negate(min, sgn,zeros); } //Process group with 5 BNs - for (int i=0;i<10;i++) { - zmm0 = ((__m512i*)cnProcBuf)[384+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + for (int i=0;i<5;i++) { + sgn = ((__m512i*)cnProcBuf)[246+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[276+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[138+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<10;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + for (int i=0;i<5;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[492+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[246+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<10;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[384+i]; + for (int i=0;i<5;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[246+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[708+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[354+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<10;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[384+i]; + for (int i=0;i<5;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[246+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[924+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[462+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<10;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[384+i]; + for (int i=0;i<5;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[246+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1140+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[570+i] = conditional_negate(min, sgn,zeros); } //Process group with 6 BNs - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[726+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1356+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[678+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1452+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[726+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1548+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[774+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1644+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[822+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1740+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[870+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1836+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[918+i] = conditional_negate(min, sgn,zeros); } //Process group with 7 BNs - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + for (int i=0;i<2;i++) { + sgn= ((__m512i*)cnProcBuf)[996+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1932+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[966+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + for (int i=0;i<2;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1992+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[996+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<2;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2052+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1026+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<2;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2112+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1056+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<2;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2172+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1086+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<2;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2232+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1116+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<2;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2292+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1146+i] = conditional_negate(min, sgn,zeros); } //Process group with 8 BNs - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1188+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2352+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1176+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2376+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1188+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2400+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1200+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2424+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1212+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2448+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1224+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2472+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1236+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2496+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1248+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2472+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2520+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1260+i] = conditional_negate(min, sgn,zeros); } //Process group with 9 BNs - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2544+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1272+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2568+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1284+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2592+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1296+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2616+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1308+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2640+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1320+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2664+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1332+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2688+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1344+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2712+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1356+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2736+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1368+i] = conditional_negate(min, sgn, zeros); } //Process group with 10 BNs - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1386+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2760+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1380+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2772+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1386+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2784+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1392+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2796+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1398+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2808+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1404+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2820+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1410+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2832+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1416+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2844+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1422+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2856+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1428+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2868+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1434+i] = conditional_negate(min,sgn,zeros); } //Process group with 19 BNs - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1464+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2880+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1440+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2928+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1464+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2976+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1488+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3024+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1512+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3072+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1536+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3120+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1560+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3168+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1584+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3216+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1608+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3264+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1632+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3312+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1656+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3360+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1680+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3408+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1704+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3456+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1728+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3504+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1752+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3552+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1776+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3600+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1800+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3648+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1824+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3696+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1848+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3744+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1872+i] = conditional_negate(min, sgn,zeros); } } diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z160_13_AVX512.c b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z160_13_AVX512.c index bd90abe1ed..51a4cc7e16 100644 --- a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z160_13_AVX512.c +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z160_13_AVX512.c @@ -1,2340 +1,2261 @@ #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; -} +#define conditional_negate(a,b,z) _mm512_mask_sub_epi8(a,_mm512_movepi8_mask(b),z,a) void nrLDPC_cnProc_BG1_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); + __m512i zmm0, min, sgn,zeros,maxLLR; + zeros = _mm512_setzero_si512(); maxLLR = _mm512_set1_epi8((char)127); - for (int i=0;i<6;i+=2) { - zmm0 = ((__m512i*)cnProcBuf)[6+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + for (int i=0;i<3;i+=2) { + sgn = ((__m512i*)cnProcBuf)[6+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[12+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[0+i] = _mm512_sign_epi16(min, sgn); - zmm0 = ((__m512i*)cnProcBuf)[7+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + ((__m512i*)cnProcBufRes)[0+i] = conditional_negate(min, sgn,zeros); + sgn = ((__m512i*)cnProcBuf)[7+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[13+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<6;i+=2) { - zmm0 = ((__m512i*)cnProcBuf)[0+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + for (int i=0;i<3;i+=2) { + sgn = ((__m512i*)cnProcBuf)[0+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[12+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[12+i] = _mm512_sign_epi16(min, sgn); - zmm0 = ((__m512i*)cnProcBuf)[1+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + ((__m512i*)cnProcBufRes)[6+i] = conditional_negate(min, sgn,zeros); + sgn = ((__m512i*)cnProcBuf)[1+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[13+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[13+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[7+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<6;i+=2) { - zmm0 = ((__m512i*)cnProcBuf)[0+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + for (int i=0;i<3;i+=2) { + sgn = ((__m512i*)cnProcBuf)[0+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[6+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[24+i] = _mm512_sign_epi16(min, sgn); - zmm0 = ((__m512i*)cnProcBuf)[1+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + ((__m512i*)cnProcBufRes)[12+i] = conditional_negate(min, sgn,zeros); + sgn = ((__m512i*)cnProcBuf)[1+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[7+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[25+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[13+i] = conditional_negate(min, sgn,zeros); } //Process group with 4 BNs - for (int i=0;i<26;i++) { - zmm0 = ((__m512i*)cnProcBuf)[66+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[96+i]; + for (int i=0;i<13;i++) { + sgn = ((__m512i*)cnProcBuf)[48+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[78+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[126+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[108+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[36+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[18+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<26;i++) { - zmm0 = ((__m512i*)cnProcBuf)[36+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[96+i]; + for (int i=0;i<13;i++) { + sgn = ((__m512i*)cnProcBuf)[18+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[78+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[126+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[108+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[96+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[48+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<26;i++) { - zmm0 = ((__m512i*)cnProcBuf)[36+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[66+i]; + for (int i=0;i<13;i++) { + sgn = ((__m512i*)cnProcBuf)[18+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[48+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[126+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[108+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[156+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[78+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<26;i++) { - zmm0 = ((__m512i*)cnProcBuf)[36+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[66+i]; + for (int i=0;i<13;i++) { + sgn = ((__m512i*)cnProcBuf)[18+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[48+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[96+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[78+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[216+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[108+i] = conditional_negate(min, sgn,zeros); } //Process group with 5 BNs - for (int i=0;i<91;i++) { - zmm0 = ((__m512i*)cnProcBuf)[384+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + for (int i=0;i<45;i++) { + sgn = ((__m512i*)cnProcBuf)[246+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[276+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[138+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<91;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + for (int i=0;i<45;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[492+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[246+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<91;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[384+i]; + for (int i=0;i<45;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[246+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[708+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[354+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<91;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[384+i]; + for (int i=0;i<45;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[246+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[924+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[462+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<91;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[384+i]; + for (int i=0;i<45;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[246+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1140+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[570+i] = conditional_negate(min, sgn,zeros); } //Process group with 6 BNs - for (int i=0;i<41;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + for (int i=0;i<20;i++) { + sgn = ((__m512i*)cnProcBuf)[726+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1356+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[678+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<41;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + for (int i=0;i<20;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1452+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[726+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<41;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<20;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1548+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[774+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<41;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<20;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1644+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[822+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<41;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<20;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1740+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[870+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<41;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<20;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1836+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[918+i] = conditional_negate(min, sgn,zeros); } //Process group with 7 BNs - for (int i=0;i<26;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + for (int i=0;i<13;i++) { + sgn= ((__m512i*)cnProcBuf)[996+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1932+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[966+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<26;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + for (int i=0;i<13;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1992+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[996+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<26;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<13;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2052+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1026+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<26;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<13;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2112+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1056+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<26;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<13;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2172+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1086+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<26;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<13;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2232+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1116+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<26;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<13;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2292+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1146+i] = conditional_negate(min, sgn,zeros); } //Process group with 8 BNs - for (int i=0;i<11;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + for (int i=0;i<5;i++) { + sgn = ((__m512i*)cnProcBuf)[1188+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2352+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1176+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<11;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + for (int i=0;i<5;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2376+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1188+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<11;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<5;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2400+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1200+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<11;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<5;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2424+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1212+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<11;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<5;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2448+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1224+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<11;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<5;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2472+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1236+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<11;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<5;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2496+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1248+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<11;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<5;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2472+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2520+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1260+i] = conditional_negate(min, sgn,zeros); } //Process group with 9 BNs - for (int i=0;i<11;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + for (int i=0;i<5;i++) { + sgn = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2544+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1272+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<11;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + for (int i=0;i<5;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2568+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1284+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<11;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<5;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2592+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1296+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<11;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<5;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2616+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1308+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<11;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<5;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2640+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1320+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<11;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<5;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2664+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1332+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<11;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<5;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2688+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1344+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<11;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<5;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2712+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1356+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<11;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<5;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2736+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1368+i] = conditional_negate(min, sgn, zeros); } //Process group with 10 BNs - for (int i=0;i<6;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[1386+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2760+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1380+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<6;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2772+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1386+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<6;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2784+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1392+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<6;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2796+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1398+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<6;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2808+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1404+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<6;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2820+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1410+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<6;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2832+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1416+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<6;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2844+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1422+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<6;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2856+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1428+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<6;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2868+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1434+i] = conditional_negate(min,sgn,zeros); } //Process group with 19 BNs - for (int i=0;i<21;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + for (int i=0;i<10;i++) { + sgn = ((__m512i*)cnProcBuf)[1464+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2880+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1440+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<21;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + for (int i=0;i<10;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2928+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1464+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<21;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<10;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2976+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1488+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<21;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<10;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3024+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1512+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<21;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<10;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3072+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1536+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<21;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<10;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3120+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1560+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<21;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<10;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3168+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1584+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<21;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<10;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3216+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1608+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<21;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<10;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3264+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1632+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<21;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<10;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3312+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1656+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<21;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<10;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3360+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1680+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<21;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<10;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3408+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1704+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<21;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<10;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3456+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1728+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<21;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<10;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3504+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1752+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<21;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<10;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3552+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1776+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<21;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<10;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3600+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1800+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<21;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<10;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3648+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1824+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<21;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<10;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3696+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1848+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<21;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<10;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3744+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1872+i] = conditional_negate(min, sgn,zeros); } } diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z16_13_AVX512.c b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z16_13_AVX512.c index 4108cc350d..eb0477a6f8 100644 --- a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z16_13_AVX512.c +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z16_13_AVX512.c @@ -1,2340 +1,2261 @@ #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; -} +#define conditional_negate(a,b,z) _mm512_mask_sub_epi8(a,_mm512_movepi8_mask(b),z,a) void nrLDPC_cnProc_BG1_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); + __m512i zmm0, min, sgn,zeros,maxLLR; + zeros = _mm512_setzero_si512(); maxLLR = _mm512_set1_epi8((char)127); - for (int i=0;i<2;i+=2) { - zmm0 = ((__m512i*)cnProcBuf)[6+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + for (int i=0;i<1;i+=2) { + sgn = ((__m512i*)cnProcBuf)[6+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[12+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[0+i] = _mm512_sign_epi16(min, sgn); - zmm0 = ((__m512i*)cnProcBuf)[7+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + ((__m512i*)cnProcBufRes)[0+i] = conditional_negate(min, sgn,zeros); + sgn = ((__m512i*)cnProcBuf)[7+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[13+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i+=2) { - zmm0 = ((__m512i*)cnProcBuf)[0+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + for (int i=0;i<1;i+=2) { + sgn = ((__m512i*)cnProcBuf)[0+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[12+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[12+i] = _mm512_sign_epi16(min, sgn); - zmm0 = ((__m512i*)cnProcBuf)[1+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + ((__m512i*)cnProcBufRes)[6+i] = conditional_negate(min, sgn,zeros); + sgn = ((__m512i*)cnProcBuf)[1+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[13+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[13+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[7+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i+=2) { - zmm0 = ((__m512i*)cnProcBuf)[0+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + for (int i=0;i<1;i+=2) { + sgn = ((__m512i*)cnProcBuf)[0+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[6+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[24+i] = _mm512_sign_epi16(min, sgn); - zmm0 = ((__m512i*)cnProcBuf)[1+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + ((__m512i*)cnProcBufRes)[12+i] = conditional_negate(min, sgn,zeros); + sgn = ((__m512i*)cnProcBuf)[1+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[7+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[25+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[13+i] = conditional_negate(min, sgn,zeros); } //Process group with 4 BNs - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[66+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[96+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[48+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[78+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[126+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[108+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[36+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[18+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[36+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[96+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[18+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[78+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[126+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[108+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[96+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[48+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[36+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[66+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[18+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[48+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[126+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[108+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[156+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[78+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[36+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[66+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[18+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[48+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[96+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[78+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[216+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[108+i] = conditional_negate(min, sgn,zeros); } //Process group with 5 BNs - for (int i=0;i<10;i++) { - zmm0 = ((__m512i*)cnProcBuf)[384+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + for (int i=0;i<5;i++) { + sgn = ((__m512i*)cnProcBuf)[246+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[276+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[138+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<10;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + for (int i=0;i<5;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[492+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[246+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<10;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[384+i]; + for (int i=0;i<5;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[246+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[708+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[354+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<10;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[384+i]; + for (int i=0;i<5;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[246+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[924+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[462+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<10;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[384+i]; + for (int i=0;i<5;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[246+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1140+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[570+i] = conditional_negate(min, sgn,zeros); } //Process group with 6 BNs - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[726+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1356+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[678+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1452+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[726+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1548+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[774+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1644+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[822+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1740+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[870+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1836+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[918+i] = conditional_negate(min, sgn,zeros); } //Process group with 7 BNs - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + for (int i=0;i<2;i++) { + sgn= ((__m512i*)cnProcBuf)[996+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1932+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[966+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + for (int i=0;i<2;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1992+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[996+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<2;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2052+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1026+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<2;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2112+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1056+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<2;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2172+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1086+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<2;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2232+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1116+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<2;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2292+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1146+i] = conditional_negate(min, sgn,zeros); } //Process group with 8 BNs - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1188+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2352+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1176+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2376+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1188+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2400+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1200+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2424+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1212+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2448+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1224+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2472+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1236+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2496+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1248+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2472+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2520+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1260+i] = conditional_negate(min, sgn,zeros); } //Process group with 9 BNs - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2544+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1272+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2568+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1284+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2592+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1296+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2616+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1308+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2640+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1320+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2664+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1332+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2688+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1344+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2712+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1356+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2736+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1368+i] = conditional_negate(min, sgn, zeros); } //Process group with 10 BNs - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1386+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2760+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1380+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2772+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1386+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2784+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1392+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2796+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1398+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2808+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1404+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2820+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1410+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2832+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1416+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2844+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1422+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2856+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1428+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2868+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1434+i] = conditional_negate(min,sgn,zeros); } //Process group with 19 BNs - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1464+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2880+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1440+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2928+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1464+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2976+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1488+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3024+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1512+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3072+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1536+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3120+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1560+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3168+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1584+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3216+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1608+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3264+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1632+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3312+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1656+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3360+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1680+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3408+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1704+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3456+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1728+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3504+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1752+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3552+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1776+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3600+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1800+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3648+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1824+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3696+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1848+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3744+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1872+i] = conditional_negate(min, sgn,zeros); } } diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z176_13_AVX512.c b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z176_13_AVX512.c index 2b8c34cfcd..50d4ea6cf9 100644 --- a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z176_13_AVX512.c +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z176_13_AVX512.c @@ -1,2340 +1,2261 @@ #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; -} +#define conditional_negate(a,b,z) _mm512_mask_sub_epi8(a,_mm512_movepi8_mask(b),z,a) void nrLDPC_cnProc_BG1_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); + __m512i zmm0, min, sgn,zeros,maxLLR; + zeros = _mm512_setzero_si512(); maxLLR = _mm512_set1_epi8((char)127); - for (int i=0;i<7;i+=2) { - zmm0 = ((__m512i*)cnProcBuf)[6+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + for (int i=0;i<3;i+=2) { + sgn = ((__m512i*)cnProcBuf)[6+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[12+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[0+i] = _mm512_sign_epi16(min, sgn); - zmm0 = ((__m512i*)cnProcBuf)[7+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + ((__m512i*)cnProcBufRes)[0+i] = conditional_negate(min, sgn,zeros); + sgn = ((__m512i*)cnProcBuf)[7+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[13+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<7;i+=2) { - zmm0 = ((__m512i*)cnProcBuf)[0+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + for (int i=0;i<3;i+=2) { + sgn = ((__m512i*)cnProcBuf)[0+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[12+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[12+i] = _mm512_sign_epi16(min, sgn); - zmm0 = ((__m512i*)cnProcBuf)[1+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + ((__m512i*)cnProcBufRes)[6+i] = conditional_negate(min, sgn,zeros); + sgn = ((__m512i*)cnProcBuf)[1+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[13+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[13+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[7+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<7;i+=2) { - zmm0 = ((__m512i*)cnProcBuf)[0+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + for (int i=0;i<3;i+=2) { + sgn = ((__m512i*)cnProcBuf)[0+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[6+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[24+i] = _mm512_sign_epi16(min, sgn); - zmm0 = ((__m512i*)cnProcBuf)[1+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + ((__m512i*)cnProcBufRes)[12+i] = conditional_negate(min, sgn,zeros); + sgn = ((__m512i*)cnProcBuf)[1+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[7+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[25+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[13+i] = conditional_negate(min, sgn,zeros); } //Process group with 4 BNs - for (int i=0;i<29;i++) { - zmm0 = ((__m512i*)cnProcBuf)[66+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[96+i]; + for (int i=0;i<14;i++) { + sgn = ((__m512i*)cnProcBuf)[48+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[78+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[126+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[108+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[36+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[18+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<29;i++) { - zmm0 = ((__m512i*)cnProcBuf)[36+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[96+i]; + for (int i=0;i<14;i++) { + sgn = ((__m512i*)cnProcBuf)[18+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[78+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[126+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[108+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[96+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[48+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<29;i++) { - zmm0 = ((__m512i*)cnProcBuf)[36+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[66+i]; + for (int i=0;i<14;i++) { + sgn = ((__m512i*)cnProcBuf)[18+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[48+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[126+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[108+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[156+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[78+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<29;i++) { - zmm0 = ((__m512i*)cnProcBuf)[36+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[66+i]; + for (int i=0;i<14;i++) { + sgn = ((__m512i*)cnProcBuf)[18+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[48+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[96+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[78+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[216+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[108+i] = conditional_negate(min, sgn,zeros); } //Process group with 5 BNs - for (int i=0;i<100;i++) { - zmm0 = ((__m512i*)cnProcBuf)[384+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + for (int i=0;i<50;i++) { + sgn = ((__m512i*)cnProcBuf)[246+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[276+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[138+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<100;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + for (int i=0;i<50;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[492+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[246+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<100;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[384+i]; + for (int i=0;i<50;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[246+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[708+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[354+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<100;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[384+i]; + for (int i=0;i<50;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[246+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[924+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[462+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<100;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[384+i]; + for (int i=0;i<50;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[246+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1140+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[570+i] = conditional_negate(min, sgn,zeros); } //Process group with 6 BNs - for (int i=0;i<45;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + for (int i=0;i<22;i++) { + sgn = ((__m512i*)cnProcBuf)[726+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1356+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[678+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<45;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + for (int i=0;i<22;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1452+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[726+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<45;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<22;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1548+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[774+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<45;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<22;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1644+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[822+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<45;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<22;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1740+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[870+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<45;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<22;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1836+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[918+i] = conditional_negate(min, sgn,zeros); } //Process group with 7 BNs - for (int i=0;i<29;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + for (int i=0;i<14;i++) { + sgn= ((__m512i*)cnProcBuf)[996+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1932+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[966+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<29;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + for (int i=0;i<14;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1992+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[996+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<29;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<14;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2052+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1026+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<29;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<14;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2112+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1056+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<29;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<14;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2172+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1086+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<29;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<14;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2232+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1116+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<29;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<14;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2292+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1146+i] = conditional_negate(min, sgn,zeros); } //Process group with 8 BNs - for (int i=0;i<12;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + for (int i=0;i<6;i++) { + sgn = ((__m512i*)cnProcBuf)[1188+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2352+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1176+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<12;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + for (int i=0;i<6;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2376+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1188+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<12;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<6;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2400+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1200+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<12;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<6;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2424+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1212+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<12;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<6;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2448+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1224+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<12;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<6;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2472+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1236+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<12;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<6;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2496+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1248+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<12;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<6;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2472+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2520+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1260+i] = conditional_negate(min, sgn,zeros); } //Process group with 9 BNs - for (int i=0;i<12;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + for (int i=0;i<6;i++) { + sgn = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2544+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1272+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<12;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + for (int i=0;i<6;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2568+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1284+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<12;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<6;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2592+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1296+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<12;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<6;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2616+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1308+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<12;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<6;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2640+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1320+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<12;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<6;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2664+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1332+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<12;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<6;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2688+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1344+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<12;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<6;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2712+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1356+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<12;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<6;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2736+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1368+i] = conditional_negate(min, sgn, zeros); } //Process group with 10 BNs - for (int i=0;i<7;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[1386+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2760+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1380+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<7;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2772+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1386+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<7;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2784+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1392+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<7;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2796+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1398+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<7;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2808+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1404+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<7;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2820+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1410+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<7;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2832+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1416+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<7;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2844+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1422+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<7;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2856+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1428+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<7;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2868+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1434+i] = conditional_negate(min,sgn,zeros); } //Process group with 19 BNs - for (int i=0;i<23;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + for (int i=0;i<11;i++) { + sgn = ((__m512i*)cnProcBuf)[1464+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2880+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1440+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<23;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + for (int i=0;i<11;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2928+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1464+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<23;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<11;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2976+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1488+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<23;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<11;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3024+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1512+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<23;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<11;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3072+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1536+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<23;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<11;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3120+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1560+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<23;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<11;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3168+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1584+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<23;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<11;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3216+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1608+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<23;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<11;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3264+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1632+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<23;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<11;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3312+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1656+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<23;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<11;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3360+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1680+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<23;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<11;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3408+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1704+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<23;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<11;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3456+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1728+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<23;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<11;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3504+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1752+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<23;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<11;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3552+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1776+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<23;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<11;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3600+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1800+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<23;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<11;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3648+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1824+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<23;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<11;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3696+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1848+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<23;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<11;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3744+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1872+i] = conditional_negate(min, sgn,zeros); } } diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z18_13_AVX512.c b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z18_13_AVX512.c index 79fd7bb3fc..23af4309f9 100644 --- a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z18_13_AVX512.c +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z18_13_AVX512.c @@ -1,2340 +1,2261 @@ #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; -} +#define conditional_negate(a,b,z) _mm512_mask_sub_epi8(a,_mm512_movepi8_mask(b),z,a) void nrLDPC_cnProc_BG1_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); + __m512i zmm0, min, sgn,zeros,maxLLR; + zeros = _mm512_setzero_si512(); maxLLR = _mm512_set1_epi8((char)127); - for (int i=0;i<2;i+=2) { - zmm0 = ((__m512i*)cnProcBuf)[6+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + for (int i=0;i<1;i+=2) { + sgn = ((__m512i*)cnProcBuf)[6+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[12+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[0+i] = _mm512_sign_epi16(min, sgn); - zmm0 = ((__m512i*)cnProcBuf)[7+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + ((__m512i*)cnProcBufRes)[0+i] = conditional_negate(min, sgn,zeros); + sgn = ((__m512i*)cnProcBuf)[7+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[13+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i+=2) { - zmm0 = ((__m512i*)cnProcBuf)[0+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + for (int i=0;i<1;i+=2) { + sgn = ((__m512i*)cnProcBuf)[0+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[12+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[12+i] = _mm512_sign_epi16(min, sgn); - zmm0 = ((__m512i*)cnProcBuf)[1+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + ((__m512i*)cnProcBufRes)[6+i] = conditional_negate(min, sgn,zeros); + sgn = ((__m512i*)cnProcBuf)[1+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[13+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[13+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[7+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i+=2) { - zmm0 = ((__m512i*)cnProcBuf)[0+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + for (int i=0;i<1;i+=2) { + sgn = ((__m512i*)cnProcBuf)[0+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[6+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[24+i] = _mm512_sign_epi16(min, sgn); - zmm0 = ((__m512i*)cnProcBuf)[1+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + ((__m512i*)cnProcBufRes)[12+i] = conditional_negate(min, sgn,zeros); + sgn = ((__m512i*)cnProcBuf)[1+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[7+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[25+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[13+i] = conditional_negate(min, sgn,zeros); } //Process group with 4 BNs - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[66+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[96+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[48+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[78+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[126+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[108+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[36+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[18+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[36+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[96+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[18+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[78+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[126+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[108+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[96+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[48+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[36+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[66+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[18+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[48+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[126+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[108+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[156+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[78+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[36+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[66+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[18+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[48+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[96+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[78+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[216+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[108+i] = conditional_negate(min, sgn,zeros); } //Process group with 5 BNs - for (int i=0;i<12;i++) { - zmm0 = ((__m512i*)cnProcBuf)[384+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + for (int i=0;i<6;i++) { + sgn = ((__m512i*)cnProcBuf)[246+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[276+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[138+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<12;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + for (int i=0;i<6;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[492+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[246+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<12;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[384+i]; + for (int i=0;i<6;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[246+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[708+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[354+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<12;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[384+i]; + for (int i=0;i<6;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[246+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[924+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[462+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<12;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[384+i]; + for (int i=0;i<6;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[246+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1140+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[570+i] = conditional_negate(min, sgn,zeros); } //Process group with 6 BNs - for (int i=0;i<6;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[726+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1356+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[678+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<6;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1452+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[726+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<6;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1548+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[774+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<6;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1644+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[822+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<6;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1740+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[870+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<6;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1836+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[918+i] = conditional_negate(min, sgn,zeros); } //Process group with 7 BNs - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + for (int i=0;i<2;i++) { + sgn= ((__m512i*)cnProcBuf)[996+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1932+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[966+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + for (int i=0;i<2;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1992+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[996+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<2;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2052+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1026+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<2;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2112+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1056+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<2;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2172+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1086+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<2;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2232+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1116+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<2;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2292+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1146+i] = conditional_negate(min, sgn,zeros); } //Process group with 8 BNs - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1188+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2352+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1176+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2376+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1188+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2400+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1200+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2424+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1212+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2448+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1224+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2472+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1236+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2496+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1248+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2472+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2520+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1260+i] = conditional_negate(min, sgn,zeros); } //Process group with 9 BNs - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2544+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1272+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2568+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1284+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2592+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1296+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2616+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1308+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2640+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1320+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2664+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1332+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2688+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1344+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2712+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1356+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2736+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1368+i] = conditional_negate(min, sgn, zeros); } //Process group with 10 BNs - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1386+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2760+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1380+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2772+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1386+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2784+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1392+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2796+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1398+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2808+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1404+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2820+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1410+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2832+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1416+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2844+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1422+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2856+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1428+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2868+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1434+i] = conditional_negate(min,sgn,zeros); } //Process group with 19 BNs - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1464+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2880+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1440+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2928+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1464+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2976+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1488+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3024+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1512+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3072+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1536+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3120+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1560+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3168+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1584+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3216+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1608+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3264+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1632+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3312+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1656+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3360+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1680+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3408+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1704+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3456+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1728+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3504+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1752+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3552+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1776+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3600+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1800+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3648+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1824+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3696+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1848+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3744+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1872+i] = conditional_negate(min, sgn,zeros); } } diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z192_13_AVX512.c b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z192_13_AVX512.c index fa57e497b2..f4d9331801 100644 --- a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z192_13_AVX512.c +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z192_13_AVX512.c @@ -1,2340 +1,2261 @@ #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; -} +#define conditional_negate(a,b,z) _mm512_mask_sub_epi8(a,_mm512_movepi8_mask(b),z,a) void nrLDPC_cnProc_BG1_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); + __m512i zmm0, min, sgn,zeros,maxLLR; + zeros = _mm512_setzero_si512(); maxLLR = _mm512_set1_epi8((char)127); - for (int i=0;i<7;i+=2) { - zmm0 = ((__m512i*)cnProcBuf)[6+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + for (int i=0;i<3;i+=2) { + sgn = ((__m512i*)cnProcBuf)[6+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[12+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[0+i] = _mm512_sign_epi16(min, sgn); - zmm0 = ((__m512i*)cnProcBuf)[7+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + ((__m512i*)cnProcBufRes)[0+i] = conditional_negate(min, sgn,zeros); + sgn = ((__m512i*)cnProcBuf)[7+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[13+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<7;i+=2) { - zmm0 = ((__m512i*)cnProcBuf)[0+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + for (int i=0;i<3;i+=2) { + sgn = ((__m512i*)cnProcBuf)[0+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[12+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[12+i] = _mm512_sign_epi16(min, sgn); - zmm0 = ((__m512i*)cnProcBuf)[1+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + ((__m512i*)cnProcBufRes)[6+i] = conditional_negate(min, sgn,zeros); + sgn = ((__m512i*)cnProcBuf)[1+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[13+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[13+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[7+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<7;i+=2) { - zmm0 = ((__m512i*)cnProcBuf)[0+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + for (int i=0;i<3;i+=2) { + sgn = ((__m512i*)cnProcBuf)[0+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[6+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[24+i] = _mm512_sign_epi16(min, sgn); - zmm0 = ((__m512i*)cnProcBuf)[1+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + ((__m512i*)cnProcBufRes)[12+i] = conditional_negate(min, sgn,zeros); + sgn = ((__m512i*)cnProcBuf)[1+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[7+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[25+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[13+i] = conditional_negate(min, sgn,zeros); } //Process group with 4 BNs - for (int i=0;i<31;i++) { - zmm0 = ((__m512i*)cnProcBuf)[66+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[96+i]; + for (int i=0;i<15;i++) { + sgn = ((__m512i*)cnProcBuf)[48+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[78+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[126+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[108+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[36+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[18+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<31;i++) { - zmm0 = ((__m512i*)cnProcBuf)[36+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[96+i]; + for (int i=0;i<15;i++) { + sgn = ((__m512i*)cnProcBuf)[18+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[78+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[126+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[108+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[96+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[48+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<31;i++) { - zmm0 = ((__m512i*)cnProcBuf)[36+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[66+i]; + for (int i=0;i<15;i++) { + sgn = ((__m512i*)cnProcBuf)[18+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[48+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[126+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[108+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[156+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[78+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<31;i++) { - zmm0 = ((__m512i*)cnProcBuf)[36+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[66+i]; + for (int i=0;i<15;i++) { + sgn = ((__m512i*)cnProcBuf)[18+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[48+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[96+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[78+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[216+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[108+i] = conditional_negate(min, sgn,zeros); } //Process group with 5 BNs - for (int i=0;i<109;i++) { - zmm0 = ((__m512i*)cnProcBuf)[384+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + for (int i=0;i<54;i++) { + sgn = ((__m512i*)cnProcBuf)[246+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[276+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[138+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<109;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + for (int i=0;i<54;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[492+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[246+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<109;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[384+i]; + for (int i=0;i<54;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[246+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[708+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[354+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<109;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[384+i]; + for (int i=0;i<54;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[246+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[924+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[462+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<109;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[384+i]; + for (int i=0;i<54;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[246+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1140+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[570+i] = conditional_negate(min, sgn,zeros); } //Process group with 6 BNs - for (int i=0;i<49;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + for (int i=0;i<24;i++) { + sgn = ((__m512i*)cnProcBuf)[726+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1356+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[678+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<49;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + for (int i=0;i<24;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1452+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[726+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<49;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<24;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1548+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[774+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<49;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<24;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1644+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[822+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<49;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<24;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1740+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[870+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<49;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<24;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1836+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[918+i] = conditional_negate(min, sgn,zeros); } //Process group with 7 BNs - for (int i=0;i<31;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + for (int i=0;i<15;i++) { + sgn= ((__m512i*)cnProcBuf)[996+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1932+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[966+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<31;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + for (int i=0;i<15;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1992+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[996+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<31;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<15;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2052+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1026+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<31;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<15;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2112+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1056+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<31;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<15;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2172+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1086+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<31;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<15;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2232+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1116+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<31;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<15;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2292+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1146+i] = conditional_negate(min, sgn,zeros); } //Process group with 8 BNs - for (int i=0;i<13;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + for (int i=0;i<6;i++) { + sgn = ((__m512i*)cnProcBuf)[1188+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2352+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1176+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<13;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + for (int i=0;i<6;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2376+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1188+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<13;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<6;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2400+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1200+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<13;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<6;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2424+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1212+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<13;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<6;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2448+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1224+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<13;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<6;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2472+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1236+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<13;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<6;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2496+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1248+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<13;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<6;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2472+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2520+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1260+i] = conditional_negate(min, sgn,zeros); } //Process group with 9 BNs - for (int i=0;i<13;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + for (int i=0;i<6;i++) { + sgn = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2544+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1272+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<13;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + for (int i=0;i<6;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2568+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1284+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<13;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<6;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2592+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1296+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<13;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<6;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2616+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1308+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<13;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<6;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2640+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1320+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<13;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<6;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2664+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1332+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<13;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<6;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2688+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1344+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<13;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<6;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2712+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1356+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<13;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<6;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2736+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1368+i] = conditional_negate(min, sgn, zeros); } //Process group with 10 BNs - for (int i=0;i<7;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[1386+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2760+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1380+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<7;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2772+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1386+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<7;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2784+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1392+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<7;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2796+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1398+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<7;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2808+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1404+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<7;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2820+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1410+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<7;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2832+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1416+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<7;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2844+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1422+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<7;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2856+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1428+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<7;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2868+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1434+i] = conditional_negate(min,sgn,zeros); } //Process group with 19 BNs - for (int i=0;i<25;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + for (int i=0;i<12;i++) { + sgn = ((__m512i*)cnProcBuf)[1464+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2880+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1440+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<25;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + for (int i=0;i<12;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2928+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1464+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<25;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<12;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2976+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1488+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<25;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<12;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3024+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1512+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<25;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<12;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3072+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1536+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<25;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<12;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3120+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1560+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<25;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<12;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3168+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1584+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<25;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<12;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3216+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1608+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<25;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<12;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3264+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1632+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<25;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<12;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3312+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1656+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<25;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<12;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3360+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1680+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<25;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<12;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3408+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1704+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<25;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<12;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3456+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1728+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<25;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<12;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3504+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1752+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<25;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<12;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3552+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1776+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<25;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<12;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3600+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1800+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<25;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<12;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3648+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1824+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<25;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<12;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3696+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1848+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<25;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<12;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3744+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1872+i] = conditional_negate(min, sgn,zeros); } } diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z208_13_AVX512.c b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z208_13_AVX512.c index 6533824d04..fc2d4598d9 100644 --- a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z208_13_AVX512.c +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z208_13_AVX512.c @@ -1,2340 +1,2261 @@ #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; -} +#define conditional_negate(a,b,z) _mm512_mask_sub_epi8(a,_mm512_movepi8_mask(b),z,a) void nrLDPC_cnProc_BG1_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); + __m512i zmm0, min, sgn,zeros,maxLLR; + zeros = _mm512_setzero_si512(); maxLLR = _mm512_set1_epi8((char)127); - for (int i=0;i<8;i+=2) { - zmm0 = ((__m512i*)cnProcBuf)[6+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + for (int i=0;i<4;i+=2) { + sgn = ((__m512i*)cnProcBuf)[6+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[12+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[0+i] = _mm512_sign_epi16(min, sgn); - zmm0 = ((__m512i*)cnProcBuf)[7+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + ((__m512i*)cnProcBufRes)[0+i] = conditional_negate(min, sgn,zeros); + sgn = ((__m512i*)cnProcBuf)[7+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[13+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<8;i+=2) { - zmm0 = ((__m512i*)cnProcBuf)[0+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + for (int i=0;i<4;i+=2) { + sgn = ((__m512i*)cnProcBuf)[0+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[12+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[12+i] = _mm512_sign_epi16(min, sgn); - zmm0 = ((__m512i*)cnProcBuf)[1+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + ((__m512i*)cnProcBufRes)[6+i] = conditional_negate(min, sgn,zeros); + sgn = ((__m512i*)cnProcBuf)[1+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[13+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[13+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[7+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<8;i+=2) { - zmm0 = ((__m512i*)cnProcBuf)[0+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + for (int i=0;i<4;i+=2) { + sgn = ((__m512i*)cnProcBuf)[0+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[6+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[24+i] = _mm512_sign_epi16(min, sgn); - zmm0 = ((__m512i*)cnProcBuf)[1+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + ((__m512i*)cnProcBufRes)[12+i] = conditional_negate(min, sgn,zeros); + sgn = ((__m512i*)cnProcBuf)[1+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[7+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[25+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[13+i] = conditional_negate(min, sgn,zeros); } //Process group with 4 BNs - for (int i=0;i<34;i++) { - zmm0 = ((__m512i*)cnProcBuf)[66+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[96+i]; + for (int i=0;i<17;i++) { + sgn = ((__m512i*)cnProcBuf)[48+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[78+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[126+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[108+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[36+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[18+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<34;i++) { - zmm0 = ((__m512i*)cnProcBuf)[36+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[96+i]; + for (int i=0;i<17;i++) { + sgn = ((__m512i*)cnProcBuf)[18+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[78+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[126+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[108+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[96+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[48+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<34;i++) { - zmm0 = ((__m512i*)cnProcBuf)[36+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[66+i]; + for (int i=0;i<17;i++) { + sgn = ((__m512i*)cnProcBuf)[18+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[48+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[126+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[108+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[156+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[78+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<34;i++) { - zmm0 = ((__m512i*)cnProcBuf)[36+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[66+i]; + for (int i=0;i<17;i++) { + sgn = ((__m512i*)cnProcBuf)[18+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[48+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[96+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[78+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[216+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[108+i] = conditional_negate(min, sgn,zeros); } //Process group with 5 BNs - for (int i=0;i<118;i++) { - zmm0 = ((__m512i*)cnProcBuf)[384+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + for (int i=0;i<59;i++) { + sgn = ((__m512i*)cnProcBuf)[246+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[276+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[138+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<118;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + for (int i=0;i<59;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[492+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[246+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<118;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[384+i]; + for (int i=0;i<59;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[246+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[708+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[354+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<118;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[384+i]; + for (int i=0;i<59;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[246+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[924+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[462+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<118;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[384+i]; + for (int i=0;i<59;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[246+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1140+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[570+i] = conditional_negate(min, sgn,zeros); } //Process group with 6 BNs - for (int i=0;i<53;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + for (int i=0;i<26;i++) { + sgn = ((__m512i*)cnProcBuf)[726+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1356+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[678+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<53;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + for (int i=0;i<26;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1452+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[726+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<53;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<26;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1548+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[774+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<53;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<26;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1644+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[822+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<53;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<26;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1740+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[870+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<53;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<26;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1836+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[918+i] = conditional_negate(min, sgn,zeros); } //Process group with 7 BNs - for (int i=0;i<34;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + for (int i=0;i<17;i++) { + sgn= ((__m512i*)cnProcBuf)[996+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1932+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[966+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<34;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + for (int i=0;i<17;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1992+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[996+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<34;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<17;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2052+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1026+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<34;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<17;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2112+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1056+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<34;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<17;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2172+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1086+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<34;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<17;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2232+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1116+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<34;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<17;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2292+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1146+i] = conditional_negate(min, sgn,zeros); } //Process group with 8 BNs - for (int i=0;i<14;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + for (int i=0;i<7;i++) { + sgn = ((__m512i*)cnProcBuf)[1188+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2352+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1176+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<14;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + for (int i=0;i<7;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2376+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1188+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<14;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<7;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2400+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1200+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<14;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<7;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2424+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1212+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<14;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<7;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2448+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1224+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<14;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<7;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2472+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1236+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<14;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<7;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2496+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1248+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<14;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<7;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2472+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2520+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1260+i] = conditional_negate(min, sgn,zeros); } //Process group with 9 BNs - for (int i=0;i<14;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + for (int i=0;i<7;i++) { + sgn = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2544+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1272+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<14;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + for (int i=0;i<7;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2568+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1284+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<14;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<7;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2592+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1296+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<14;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<7;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2616+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1308+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<14;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<7;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2640+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1320+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<14;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<7;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2664+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1332+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<14;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<7;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2688+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1344+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<14;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<7;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2712+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1356+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<14;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<7;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2736+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1368+i] = conditional_negate(min, sgn, zeros); } //Process group with 10 BNs - for (int i=0;i<8;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[1386+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2760+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1380+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<8;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2772+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1386+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<8;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2784+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1392+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<8;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2796+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1398+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<8;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2808+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1404+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<8;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2820+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1410+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<8;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2832+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1416+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<8;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2844+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1422+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<8;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2856+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1428+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<8;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2868+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1434+i] = conditional_negate(min,sgn,zeros); } //Process group with 19 BNs - for (int i=0;i<27;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + for (int i=0;i<13;i++) { + sgn = ((__m512i*)cnProcBuf)[1464+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2880+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1440+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<27;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + for (int i=0;i<13;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2928+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1464+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<27;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<13;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2976+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1488+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<27;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<13;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3024+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1512+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<27;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<13;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3072+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1536+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<27;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<13;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3120+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1560+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<27;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<13;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3168+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1584+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<27;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<13;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3216+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1608+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<27;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<13;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3264+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1632+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<27;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<13;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3312+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1656+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<27;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<13;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3360+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1680+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<27;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<13;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3408+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1704+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<27;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<13;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3456+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1728+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<27;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<13;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3504+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1752+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<27;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<13;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3552+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1776+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<27;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<13;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3600+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1800+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<27;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<13;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3648+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1824+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<27;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<13;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3696+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1848+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<27;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<13;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3744+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1872+i] = conditional_negate(min, sgn,zeros); } } diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z20_13_AVX512.c b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z20_13_AVX512.c index b64ec809d7..c1812d6cdf 100644 --- a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z20_13_AVX512.c +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z20_13_AVX512.c @@ -1,2340 +1,2261 @@ #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; -} +#define conditional_negate(a,b,z) _mm512_mask_sub_epi8(a,_mm512_movepi8_mask(b),z,a) void nrLDPC_cnProc_BG1_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); + __m512i zmm0, min, sgn,zeros,maxLLR; + zeros = _mm512_setzero_si512(); maxLLR = _mm512_set1_epi8((char)127); - for (int i=0;i<2;i+=2) { - zmm0 = ((__m512i*)cnProcBuf)[6+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + for (int i=0;i<1;i+=2) { + sgn = ((__m512i*)cnProcBuf)[6+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[12+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[0+i] = _mm512_sign_epi16(min, sgn); - zmm0 = ((__m512i*)cnProcBuf)[7+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + ((__m512i*)cnProcBufRes)[0+i] = conditional_negate(min, sgn,zeros); + sgn = ((__m512i*)cnProcBuf)[7+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[13+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i+=2) { - zmm0 = ((__m512i*)cnProcBuf)[0+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + for (int i=0;i<1;i+=2) { + sgn = ((__m512i*)cnProcBuf)[0+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[12+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[12+i] = _mm512_sign_epi16(min, sgn); - zmm0 = ((__m512i*)cnProcBuf)[1+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + ((__m512i*)cnProcBufRes)[6+i] = conditional_negate(min, sgn,zeros); + sgn = ((__m512i*)cnProcBuf)[1+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[13+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[13+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[7+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i+=2) { - zmm0 = ((__m512i*)cnProcBuf)[0+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + for (int i=0;i<1;i+=2) { + sgn = ((__m512i*)cnProcBuf)[0+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[6+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[24+i] = _mm512_sign_epi16(min, sgn); - zmm0 = ((__m512i*)cnProcBuf)[1+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + ((__m512i*)cnProcBufRes)[12+i] = conditional_negate(min, sgn,zeros); + sgn = ((__m512i*)cnProcBuf)[1+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[7+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[25+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[13+i] = conditional_negate(min, sgn,zeros); } //Process group with 4 BNs - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[66+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[96+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[48+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[78+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[126+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[108+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[36+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[18+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[36+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[96+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[18+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[78+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[126+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[108+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[96+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[48+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[36+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[66+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[18+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[48+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[126+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[108+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[156+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[78+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[36+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[66+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[18+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[48+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[96+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[78+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[216+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[108+i] = conditional_negate(min, sgn,zeros); } //Process group with 5 BNs - for (int i=0;i<13;i++) { - zmm0 = ((__m512i*)cnProcBuf)[384+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + for (int i=0;i<6;i++) { + sgn = ((__m512i*)cnProcBuf)[246+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[276+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[138+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<13;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + for (int i=0;i<6;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[492+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[246+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<13;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[384+i]; + for (int i=0;i<6;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[246+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[708+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[354+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<13;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[384+i]; + for (int i=0;i<6;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[246+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[924+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[462+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<13;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[384+i]; + for (int i=0;i<6;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[246+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1140+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[570+i] = conditional_negate(min, sgn,zeros); } //Process group with 6 BNs - for (int i=0;i<6;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[726+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1356+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[678+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<6;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1452+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[726+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<6;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1548+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[774+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<6;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1644+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[822+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<6;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1740+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[870+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<6;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1836+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[918+i] = conditional_negate(min, sgn,zeros); } //Process group with 7 BNs - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + for (int i=0;i<2;i++) { + sgn= ((__m512i*)cnProcBuf)[996+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1932+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[966+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + for (int i=0;i<2;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1992+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[996+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<2;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2052+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1026+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<2;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2112+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1056+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<2;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2172+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1086+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<2;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2232+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1116+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<2;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2292+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1146+i] = conditional_negate(min, sgn,zeros); } //Process group with 8 BNs - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1188+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2352+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1176+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2376+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1188+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2400+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1200+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2424+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1212+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2448+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1224+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2472+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1236+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2496+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1248+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2472+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2520+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1260+i] = conditional_negate(min, sgn,zeros); } //Process group with 9 BNs - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2544+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1272+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2568+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1284+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2592+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1296+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2616+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1308+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2640+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1320+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2664+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1332+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2688+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1344+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2712+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1356+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2736+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1368+i] = conditional_negate(min, sgn, zeros); } //Process group with 10 BNs - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1386+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2760+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1380+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2772+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1386+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2784+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1392+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2796+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1398+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2808+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1404+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2820+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1410+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2832+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1416+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2844+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1422+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2856+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1428+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2868+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1434+i] = conditional_negate(min,sgn,zeros); } //Process group with 19 BNs - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1464+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2880+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1440+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2928+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1464+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2976+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1488+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3024+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1512+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3072+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1536+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3120+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1560+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3168+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1584+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3216+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1608+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3264+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1632+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3312+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1656+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3360+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1680+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3408+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1704+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3456+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1728+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3504+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1752+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3552+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1776+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3600+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1800+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3648+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1824+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3696+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1848+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3744+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1872+i] = conditional_negate(min, sgn,zeros); } } diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z224_13_AVX512.c b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z224_13_AVX512.c index 96bd8f328b..a3712dd094 100644 --- a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z224_13_AVX512.c +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z224_13_AVX512.c @@ -1,2340 +1,2261 @@ #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; -} +#define conditional_negate(a,b,z) _mm512_mask_sub_epi8(a,_mm512_movepi8_mask(b),z,a) void nrLDPC_cnProc_BG1_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); + __m512i zmm0, min, sgn,zeros,maxLLR; + zeros = _mm512_setzero_si512(); maxLLR = _mm512_set1_epi8((char)127); - for (int i=0;i<8;i+=2) { - zmm0 = ((__m512i*)cnProcBuf)[6+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + for (int i=0;i<4;i+=2) { + sgn = ((__m512i*)cnProcBuf)[6+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[12+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[0+i] = _mm512_sign_epi16(min, sgn); - zmm0 = ((__m512i*)cnProcBuf)[7+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + ((__m512i*)cnProcBufRes)[0+i] = conditional_negate(min, sgn,zeros); + sgn = ((__m512i*)cnProcBuf)[7+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[13+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<8;i+=2) { - zmm0 = ((__m512i*)cnProcBuf)[0+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + for (int i=0;i<4;i+=2) { + sgn = ((__m512i*)cnProcBuf)[0+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[12+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[12+i] = _mm512_sign_epi16(min, sgn); - zmm0 = ((__m512i*)cnProcBuf)[1+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + ((__m512i*)cnProcBufRes)[6+i] = conditional_negate(min, sgn,zeros); + sgn = ((__m512i*)cnProcBuf)[1+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[13+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[13+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[7+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<8;i+=2) { - zmm0 = ((__m512i*)cnProcBuf)[0+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + for (int i=0;i<4;i+=2) { + sgn = ((__m512i*)cnProcBuf)[0+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[6+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[24+i] = _mm512_sign_epi16(min, sgn); - zmm0 = ((__m512i*)cnProcBuf)[1+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + ((__m512i*)cnProcBufRes)[12+i] = conditional_negate(min, sgn,zeros); + sgn = ((__m512i*)cnProcBuf)[1+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[7+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[25+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[13+i] = conditional_negate(min, sgn,zeros); } //Process group with 4 BNs - for (int i=0;i<36;i++) { - zmm0 = ((__m512i*)cnProcBuf)[66+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[96+i]; + for (int i=0;i<18;i++) { + sgn = ((__m512i*)cnProcBuf)[48+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[78+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[126+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[108+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[36+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[18+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<36;i++) { - zmm0 = ((__m512i*)cnProcBuf)[36+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[96+i]; + for (int i=0;i<18;i++) { + sgn = ((__m512i*)cnProcBuf)[18+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[78+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[126+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[108+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[96+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[48+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<36;i++) { - zmm0 = ((__m512i*)cnProcBuf)[36+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[66+i]; + for (int i=0;i<18;i++) { + sgn = ((__m512i*)cnProcBuf)[18+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[48+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[126+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[108+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[156+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[78+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<36;i++) { - zmm0 = ((__m512i*)cnProcBuf)[36+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[66+i]; + for (int i=0;i<18;i++) { + sgn = ((__m512i*)cnProcBuf)[18+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[48+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[96+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[78+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[216+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[108+i] = conditional_negate(min, sgn,zeros); } //Process group with 5 BNs - for (int i=0;i<127;i++) { - zmm0 = ((__m512i*)cnProcBuf)[384+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + for (int i=0;i<63;i++) { + sgn = ((__m512i*)cnProcBuf)[246+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[276+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[138+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<127;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + for (int i=0;i<63;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[492+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[246+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<127;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[384+i]; + for (int i=0;i<63;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[246+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[708+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[354+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<127;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[384+i]; + for (int i=0;i<63;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[246+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[924+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[462+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<127;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[384+i]; + for (int i=0;i<63;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[246+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1140+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[570+i] = conditional_negate(min, sgn,zeros); } //Process group with 6 BNs - for (int i=0;i<57;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + for (int i=0;i<28;i++) { + sgn = ((__m512i*)cnProcBuf)[726+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1356+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[678+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<57;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + for (int i=0;i<28;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1452+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[726+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<57;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<28;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1548+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[774+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<57;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<28;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1644+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[822+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<57;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<28;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1740+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[870+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<57;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<28;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1836+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[918+i] = conditional_negate(min, sgn,zeros); } //Process group with 7 BNs - for (int i=0;i<36;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + for (int i=0;i<18;i++) { + sgn= ((__m512i*)cnProcBuf)[996+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1932+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[966+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<36;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + for (int i=0;i<18;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1992+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[996+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<36;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<18;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2052+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1026+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<36;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<18;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2112+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1056+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<36;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<18;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2172+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1086+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<36;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<18;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2232+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1116+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<36;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<18;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2292+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1146+i] = conditional_negate(min, sgn,zeros); } //Process group with 8 BNs - for (int i=0;i<15;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + for (int i=0;i<7;i++) { + sgn = ((__m512i*)cnProcBuf)[1188+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2352+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1176+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<15;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + for (int i=0;i<7;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2376+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1188+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<15;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<7;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2400+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1200+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<15;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<7;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2424+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1212+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<15;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<7;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2448+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1224+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<15;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<7;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2472+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1236+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<15;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<7;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2496+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1248+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<15;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<7;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2472+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2520+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1260+i] = conditional_negate(min, sgn,zeros); } //Process group with 9 BNs - for (int i=0;i<15;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + for (int i=0;i<7;i++) { + sgn = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2544+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1272+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<15;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + for (int i=0;i<7;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2568+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1284+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<15;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<7;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2592+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1296+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<15;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<7;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2616+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1308+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<15;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<7;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2640+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1320+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<15;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<7;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2664+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1332+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<15;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<7;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2688+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1344+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<15;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<7;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2712+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1356+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<15;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<7;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2736+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1368+i] = conditional_negate(min, sgn, zeros); } //Process group with 10 BNs - for (int i=0;i<8;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[1386+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2760+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1380+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<8;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2772+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1386+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<8;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2784+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1392+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<8;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2796+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1398+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<8;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2808+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1404+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<8;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2820+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1410+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<8;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2832+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1416+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<8;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2844+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1422+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<8;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2856+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1428+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<8;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2868+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1434+i] = conditional_negate(min,sgn,zeros); } //Process group with 19 BNs - for (int i=0;i<29;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + for (int i=0;i<14;i++) { + sgn = ((__m512i*)cnProcBuf)[1464+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2880+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1440+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<29;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + for (int i=0;i<14;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2928+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1464+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<29;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<14;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2976+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1488+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<29;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<14;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3024+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1512+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<29;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<14;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3072+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1536+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<29;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<14;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3120+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1560+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<29;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<14;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3168+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1584+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<29;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<14;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3216+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1608+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<29;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<14;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3264+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1632+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<29;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<14;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3312+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1656+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<29;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<14;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3360+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1680+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<29;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<14;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3408+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1704+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<29;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<14;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3456+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1728+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<29;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<14;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3504+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1752+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<29;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<14;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3552+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1776+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<29;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<14;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3600+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1800+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<29;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<14;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3648+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1824+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<29;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<14;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3696+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1848+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<29;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<14;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3744+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1872+i] = conditional_negate(min, sgn,zeros); } } diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z22_13_AVX512.c b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z22_13_AVX512.c index 071aaa7acc..e57a6940bb 100644 --- a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z22_13_AVX512.c +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z22_13_AVX512.c @@ -1,2340 +1,2261 @@ #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; -} +#define conditional_negate(a,b,z) _mm512_mask_sub_epi8(a,_mm512_movepi8_mask(b),z,a) void nrLDPC_cnProc_BG1_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); + __m512i zmm0, min, sgn,zeros,maxLLR; + zeros = _mm512_setzero_si512(); maxLLR = _mm512_set1_epi8((char)127); - for (int i=0;i<2;i+=2) { - zmm0 = ((__m512i*)cnProcBuf)[6+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + for (int i=0;i<1;i+=2) { + sgn = ((__m512i*)cnProcBuf)[6+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[12+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[0+i] = _mm512_sign_epi16(min, sgn); - zmm0 = ((__m512i*)cnProcBuf)[7+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + ((__m512i*)cnProcBufRes)[0+i] = conditional_negate(min, sgn,zeros); + sgn = ((__m512i*)cnProcBuf)[7+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[13+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i+=2) { - zmm0 = ((__m512i*)cnProcBuf)[0+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + for (int i=0;i<1;i+=2) { + sgn = ((__m512i*)cnProcBuf)[0+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[12+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[12+i] = _mm512_sign_epi16(min, sgn); - zmm0 = ((__m512i*)cnProcBuf)[1+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + ((__m512i*)cnProcBufRes)[6+i] = conditional_negate(min, sgn,zeros); + sgn = ((__m512i*)cnProcBuf)[1+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[13+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[13+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[7+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i+=2) { - zmm0 = ((__m512i*)cnProcBuf)[0+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + for (int i=0;i<1;i+=2) { + sgn = ((__m512i*)cnProcBuf)[0+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[6+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[24+i] = _mm512_sign_epi16(min, sgn); - zmm0 = ((__m512i*)cnProcBuf)[1+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + ((__m512i*)cnProcBufRes)[12+i] = conditional_negate(min, sgn,zeros); + sgn = ((__m512i*)cnProcBuf)[1+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[7+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[25+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[13+i] = conditional_negate(min, sgn,zeros); } //Process group with 4 BNs - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[66+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[96+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[48+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[78+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[126+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[108+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[36+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[18+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[36+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[96+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[18+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[78+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[126+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[108+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[96+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[48+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[36+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[66+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[18+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[48+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[126+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[108+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[156+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[78+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[36+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[66+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[18+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[48+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[96+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[78+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[216+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[108+i] = conditional_negate(min, sgn,zeros); } //Process group with 5 BNs - for (int i=0;i<14;i++) { - zmm0 = ((__m512i*)cnProcBuf)[384+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + for (int i=0;i<7;i++) { + sgn = ((__m512i*)cnProcBuf)[246+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[276+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[138+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<14;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + for (int i=0;i<7;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[492+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[246+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<14;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[384+i]; + for (int i=0;i<7;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[246+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[708+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[354+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<14;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[384+i]; + for (int i=0;i<7;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[246+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[924+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[462+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<14;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[384+i]; + for (int i=0;i<7;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[246+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1140+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[570+i] = conditional_negate(min, sgn,zeros); } //Process group with 6 BNs - for (int i=0;i<7;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[726+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1356+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[678+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<7;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1452+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[726+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<7;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1548+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[774+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<7;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1644+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[822+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<7;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1740+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[870+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<7;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1836+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[918+i] = conditional_negate(min, sgn,zeros); } //Process group with 7 BNs - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + for (int i=0;i<2;i++) { + sgn= ((__m512i*)cnProcBuf)[996+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1932+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[966+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + for (int i=0;i<2;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1992+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[996+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<2;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2052+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1026+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<2;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2112+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1056+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<2;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2172+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1086+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<2;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2232+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1116+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<2;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2292+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1146+i] = conditional_negate(min, sgn,zeros); } //Process group with 8 BNs - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1188+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2352+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1176+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2376+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1188+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2400+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1200+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2424+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1212+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2448+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1224+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2472+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1236+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2496+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1248+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2472+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2520+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1260+i] = conditional_negate(min, sgn,zeros); } //Process group with 9 BNs - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2544+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1272+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2568+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1284+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2592+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1296+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2616+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1308+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2640+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1320+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2664+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1332+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2688+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1344+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2712+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1356+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2736+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1368+i] = conditional_negate(min, sgn, zeros); } //Process group with 10 BNs - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1386+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2760+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1380+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2772+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1386+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2784+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1392+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2796+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1398+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2808+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1404+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2820+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1410+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2832+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1416+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2844+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1422+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2856+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1428+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2868+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1434+i] = conditional_negate(min,sgn,zeros); } //Process group with 19 BNs - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1464+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2880+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1440+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2928+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1464+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2976+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1488+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3024+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1512+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3072+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1536+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3120+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1560+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3168+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1584+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3216+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1608+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3264+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1632+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3312+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1656+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3360+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1680+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3408+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1704+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3456+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1728+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3504+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1752+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3552+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1776+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3600+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1800+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3648+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1824+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3696+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1848+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3744+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1872+i] = conditional_negate(min, sgn,zeros); } } diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z240_13_AVX512.c b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z240_13_AVX512.c index 53a9cdbdf4..547fe81421 100644 --- a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z240_13_AVX512.c +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z240_13_AVX512.c @@ -1,2340 +1,2261 @@ #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; -} +#define conditional_negate(a,b,z) _mm512_mask_sub_epi8(a,_mm512_movepi8_mask(b),z,a) void nrLDPC_cnProc_BG1_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); + __m512i zmm0, min, sgn,zeros,maxLLR; + zeros = _mm512_setzero_si512(); maxLLR = _mm512_set1_epi8((char)127); - for (int i=0;i<9;i+=2) { - zmm0 = ((__m512i*)cnProcBuf)[6+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + for (int i=0;i<4;i+=2) { + sgn = ((__m512i*)cnProcBuf)[6+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[12+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[0+i] = _mm512_sign_epi16(min, sgn); - zmm0 = ((__m512i*)cnProcBuf)[7+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + ((__m512i*)cnProcBufRes)[0+i] = conditional_negate(min, sgn,zeros); + sgn = ((__m512i*)cnProcBuf)[7+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[13+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<9;i+=2) { - zmm0 = ((__m512i*)cnProcBuf)[0+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + for (int i=0;i<4;i+=2) { + sgn = ((__m512i*)cnProcBuf)[0+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[12+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[12+i] = _mm512_sign_epi16(min, sgn); - zmm0 = ((__m512i*)cnProcBuf)[1+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + ((__m512i*)cnProcBufRes)[6+i] = conditional_negate(min, sgn,zeros); + sgn = ((__m512i*)cnProcBuf)[1+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[13+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[13+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[7+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<9;i+=2) { - zmm0 = ((__m512i*)cnProcBuf)[0+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + for (int i=0;i<4;i+=2) { + sgn = ((__m512i*)cnProcBuf)[0+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[6+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[24+i] = _mm512_sign_epi16(min, sgn); - zmm0 = ((__m512i*)cnProcBuf)[1+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + ((__m512i*)cnProcBufRes)[12+i] = conditional_negate(min, sgn,zeros); + sgn = ((__m512i*)cnProcBuf)[1+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[7+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[25+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[13+i] = conditional_negate(min, sgn,zeros); } //Process group with 4 BNs - for (int i=0;i<39;i++) { - zmm0 = ((__m512i*)cnProcBuf)[66+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[96+i]; + for (int i=0;i<19;i++) { + sgn = ((__m512i*)cnProcBuf)[48+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[78+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[126+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[108+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[36+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[18+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<39;i++) { - zmm0 = ((__m512i*)cnProcBuf)[36+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[96+i]; + for (int i=0;i<19;i++) { + sgn = ((__m512i*)cnProcBuf)[18+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[78+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[126+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[108+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[96+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[48+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<39;i++) { - zmm0 = ((__m512i*)cnProcBuf)[36+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[66+i]; + for (int i=0;i<19;i++) { + sgn = ((__m512i*)cnProcBuf)[18+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[48+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[126+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[108+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[156+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[78+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<39;i++) { - zmm0 = ((__m512i*)cnProcBuf)[36+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[66+i]; + for (int i=0;i<19;i++) { + sgn = ((__m512i*)cnProcBuf)[18+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[48+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[96+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[78+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[216+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[108+i] = conditional_negate(min, sgn,zeros); } //Process group with 5 BNs - for (int i=0;i<136;i++) { - zmm0 = ((__m512i*)cnProcBuf)[384+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + for (int i=0;i<68;i++) { + sgn = ((__m512i*)cnProcBuf)[246+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[276+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[138+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<136;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + for (int i=0;i<68;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[492+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[246+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<136;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[384+i]; + for (int i=0;i<68;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[246+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[708+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[354+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<136;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[384+i]; + for (int i=0;i<68;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[246+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[924+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[462+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<136;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[384+i]; + for (int i=0;i<68;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[246+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1140+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[570+i] = conditional_negate(min, sgn,zeros); } //Process group with 6 BNs - for (int i=0;i<61;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + for (int i=0;i<30;i++) { + sgn = ((__m512i*)cnProcBuf)[726+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1356+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[678+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<61;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + for (int i=0;i<30;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1452+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[726+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<61;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<30;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1548+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[774+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<61;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<30;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1644+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[822+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<61;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<30;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1740+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[870+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<61;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<30;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1836+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[918+i] = conditional_negate(min, sgn,zeros); } //Process group with 7 BNs - for (int i=0;i<39;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + for (int i=0;i<19;i++) { + sgn= ((__m512i*)cnProcBuf)[996+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1932+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[966+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<39;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + for (int i=0;i<19;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1992+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[996+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<39;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<19;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2052+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1026+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<39;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<19;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2112+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1056+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<39;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<19;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2172+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1086+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<39;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<19;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2232+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1116+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<39;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<19;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2292+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1146+i] = conditional_negate(min, sgn,zeros); } //Process group with 8 BNs - for (int i=0;i<16;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + for (int i=0;i<8;i++) { + sgn = ((__m512i*)cnProcBuf)[1188+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2352+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1176+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<16;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + for (int i=0;i<8;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2376+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1188+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<16;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<8;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2400+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1200+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<16;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<8;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2424+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1212+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<16;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<8;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2448+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1224+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<16;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<8;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2472+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1236+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<16;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<8;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2496+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1248+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<16;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<8;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2472+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2520+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1260+i] = conditional_negate(min, sgn,zeros); } //Process group with 9 BNs - for (int i=0;i<16;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + for (int i=0;i<8;i++) { + sgn = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2544+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1272+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<16;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + for (int i=0;i<8;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2568+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1284+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<16;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<8;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2592+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1296+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<16;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<8;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2616+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1308+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<16;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<8;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2640+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1320+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<16;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<8;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2664+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1332+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<16;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<8;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2688+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1344+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<16;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<8;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2712+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1356+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<16;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<8;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2736+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1368+i] = conditional_negate(min, sgn, zeros); } //Process group with 10 BNs - for (int i=0;i<9;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[1386+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2760+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1380+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<9;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2772+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1386+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<9;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2784+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1392+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<9;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2796+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1398+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<9;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2808+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1404+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<9;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2820+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1410+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<9;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2832+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1416+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<9;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2844+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1422+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<9;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2856+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1428+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<9;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2868+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1434+i] = conditional_negate(min,sgn,zeros); } //Process group with 19 BNs - for (int i=0;i<31;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + for (int i=0;i<15;i++) { + sgn = ((__m512i*)cnProcBuf)[1464+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2880+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1440+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<31;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + for (int i=0;i<15;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2928+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1464+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<31;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<15;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2976+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1488+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<31;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<15;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3024+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1512+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<31;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<15;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3072+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1536+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<31;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<15;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3120+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1560+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<31;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<15;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3168+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1584+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<31;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<15;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3216+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1608+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<31;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<15;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3264+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1632+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<31;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<15;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3312+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1656+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<31;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<15;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3360+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1680+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<31;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<15;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3408+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1704+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<31;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<15;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3456+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1728+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<31;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<15;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3504+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1752+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<31;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<15;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3552+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1776+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<31;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<15;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3600+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1800+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<31;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<15;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3648+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1824+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<31;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<15;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3696+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1848+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<31;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<15;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3744+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1872+i] = conditional_negate(min, sgn,zeros); } } diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z24_13_AVX512.c b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z24_13_AVX512.c index a34658b5ec..a82c63869b 100644 --- a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z24_13_AVX512.c +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z24_13_AVX512.c @@ -1,2340 +1,2261 @@ #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; -} +#define conditional_negate(a,b,z) _mm512_mask_sub_epi8(a,_mm512_movepi8_mask(b),z,a) void nrLDPC_cnProc_BG1_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); + __m512i zmm0, min, sgn,zeros,maxLLR; + zeros = _mm512_setzero_si512(); maxLLR = _mm512_set1_epi8((char)127); - for (int i=0;i<2;i+=2) { - zmm0 = ((__m512i*)cnProcBuf)[6+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + for (int i=0;i<1;i+=2) { + sgn = ((__m512i*)cnProcBuf)[6+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[12+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[0+i] = _mm512_sign_epi16(min, sgn); - zmm0 = ((__m512i*)cnProcBuf)[7+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + ((__m512i*)cnProcBufRes)[0+i] = conditional_negate(min, sgn,zeros); + sgn = ((__m512i*)cnProcBuf)[7+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[13+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i+=2) { - zmm0 = ((__m512i*)cnProcBuf)[0+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + for (int i=0;i<1;i+=2) { + sgn = ((__m512i*)cnProcBuf)[0+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[12+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[12+i] = _mm512_sign_epi16(min, sgn); - zmm0 = ((__m512i*)cnProcBuf)[1+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + ((__m512i*)cnProcBufRes)[6+i] = conditional_negate(min, sgn,zeros); + sgn = ((__m512i*)cnProcBuf)[1+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[13+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[13+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[7+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i+=2) { - zmm0 = ((__m512i*)cnProcBuf)[0+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + for (int i=0;i<1;i+=2) { + sgn = ((__m512i*)cnProcBuf)[0+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[6+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[24+i] = _mm512_sign_epi16(min, sgn); - zmm0 = ((__m512i*)cnProcBuf)[1+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + ((__m512i*)cnProcBufRes)[12+i] = conditional_negate(min, sgn,zeros); + sgn = ((__m512i*)cnProcBuf)[1+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[7+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[25+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[13+i] = conditional_negate(min, sgn,zeros); } //Process group with 4 BNs - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[66+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[96+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[48+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[78+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[126+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[108+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[36+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[18+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[36+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[96+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[18+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[78+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[126+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[108+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[96+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[48+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[36+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[66+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[18+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[48+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[126+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[108+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[156+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[78+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[36+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[66+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[18+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[48+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[96+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[78+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[216+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[108+i] = conditional_negate(min, sgn,zeros); } //Process group with 5 BNs - for (int i=0;i<15;i++) { - zmm0 = ((__m512i*)cnProcBuf)[384+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + for (int i=0;i<7;i++) { + sgn = ((__m512i*)cnProcBuf)[246+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[276+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[138+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<15;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + for (int i=0;i<7;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[492+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[246+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<15;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[384+i]; + for (int i=0;i<7;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[246+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[708+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[354+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<15;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[384+i]; + for (int i=0;i<7;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[246+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[924+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[462+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<15;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[384+i]; + for (int i=0;i<7;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[246+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1140+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[570+i] = conditional_negate(min, sgn,zeros); } //Process group with 6 BNs - for (int i=0;i<7;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[726+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1356+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[678+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<7;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1452+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[726+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<7;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1548+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[774+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<7;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1644+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[822+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<7;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1740+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[870+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<7;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1836+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[918+i] = conditional_negate(min, sgn,zeros); } //Process group with 7 BNs - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + for (int i=0;i<2;i++) { + sgn= ((__m512i*)cnProcBuf)[996+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1932+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[966+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + for (int i=0;i<2;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1992+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[996+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<2;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2052+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1026+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<2;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2112+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1056+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<2;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2172+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1086+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<2;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2232+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1116+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<2;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2292+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1146+i] = conditional_negate(min, sgn,zeros); } //Process group with 8 BNs - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1188+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2352+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1176+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2376+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1188+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2400+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1200+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2424+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1212+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2448+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1224+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2472+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1236+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2496+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1248+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2472+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2520+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1260+i] = conditional_negate(min, sgn,zeros); } //Process group with 9 BNs - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2544+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1272+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2568+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1284+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2592+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1296+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2616+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1308+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2640+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1320+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2664+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1332+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2688+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1344+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2712+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1356+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2736+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1368+i] = conditional_negate(min, sgn, zeros); } //Process group with 10 BNs - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1386+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2760+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1380+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2772+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1386+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2784+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1392+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2796+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1398+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2808+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1404+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2820+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1410+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2832+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1416+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2844+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1422+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2856+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1428+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2868+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1434+i] = conditional_negate(min,sgn,zeros); } //Process group with 19 BNs - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1464+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2880+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1440+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2928+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1464+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2976+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1488+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3024+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1512+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3072+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1536+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3120+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1560+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3168+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1584+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3216+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1608+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3264+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1632+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3312+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1656+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3360+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1680+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3408+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1704+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3456+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1728+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3504+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1752+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3552+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1776+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3600+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1800+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3648+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1824+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3696+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1848+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3744+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1872+i] = conditional_negate(min, sgn,zeros); } } diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z256_13_AVX512.c b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z256_13_AVX512.c index c7a646abae..b52b8b6d80 100644 --- a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z256_13_AVX512.c +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z256_13_AVX512.c @@ -1,2340 +1,2261 @@ #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; -} +#define conditional_negate(a,b,z) _mm512_mask_sub_epi8(a,_mm512_movepi8_mask(b),z,a) void nrLDPC_cnProc_BG1_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); + __m512i zmm0, min, sgn,zeros,maxLLR; + zeros = _mm512_setzero_si512(); maxLLR = _mm512_set1_epi8((char)127); - for (int i=0;i<9;i+=2) { - zmm0 = ((__m512i*)cnProcBuf)[6+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + for (int i=0;i<4;i+=2) { + sgn = ((__m512i*)cnProcBuf)[6+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[12+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[0+i] = _mm512_sign_epi16(min, sgn); - zmm0 = ((__m512i*)cnProcBuf)[7+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + ((__m512i*)cnProcBufRes)[0+i] = conditional_negate(min, sgn,zeros); + sgn = ((__m512i*)cnProcBuf)[7+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[13+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<9;i+=2) { - zmm0 = ((__m512i*)cnProcBuf)[0+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + for (int i=0;i<4;i+=2) { + sgn = ((__m512i*)cnProcBuf)[0+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[12+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[12+i] = _mm512_sign_epi16(min, sgn); - zmm0 = ((__m512i*)cnProcBuf)[1+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + ((__m512i*)cnProcBufRes)[6+i] = conditional_negate(min, sgn,zeros); + sgn = ((__m512i*)cnProcBuf)[1+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[13+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[13+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[7+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<9;i+=2) { - zmm0 = ((__m512i*)cnProcBuf)[0+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + for (int i=0;i<4;i+=2) { + sgn = ((__m512i*)cnProcBuf)[0+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[6+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[24+i] = _mm512_sign_epi16(min, sgn); - zmm0 = ((__m512i*)cnProcBuf)[1+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + ((__m512i*)cnProcBufRes)[12+i] = conditional_negate(min, sgn,zeros); + sgn = ((__m512i*)cnProcBuf)[1+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[7+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[25+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[13+i] = conditional_negate(min, sgn,zeros); } //Process group with 4 BNs - for (int i=0;i<41;i++) { - zmm0 = ((__m512i*)cnProcBuf)[66+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[96+i]; + for (int i=0;i<20;i++) { + sgn = ((__m512i*)cnProcBuf)[48+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[78+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[126+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[108+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[36+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[18+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<41;i++) { - zmm0 = ((__m512i*)cnProcBuf)[36+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[96+i]; + for (int i=0;i<20;i++) { + sgn = ((__m512i*)cnProcBuf)[18+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[78+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[126+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[108+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[96+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[48+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<41;i++) { - zmm0 = ((__m512i*)cnProcBuf)[36+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[66+i]; + for (int i=0;i<20;i++) { + sgn = ((__m512i*)cnProcBuf)[18+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[48+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[126+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[108+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[156+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[78+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<41;i++) { - zmm0 = ((__m512i*)cnProcBuf)[36+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[66+i]; + for (int i=0;i<20;i++) { + sgn = ((__m512i*)cnProcBuf)[18+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[48+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[96+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[78+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[216+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[108+i] = conditional_negate(min, sgn,zeros); } //Process group with 5 BNs - for (int i=0;i<145;i++) { - zmm0 = ((__m512i*)cnProcBuf)[384+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + for (int i=0;i<72;i++) { + sgn = ((__m512i*)cnProcBuf)[246+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[276+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[138+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<145;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + for (int i=0;i<72;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[492+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[246+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<145;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[384+i]; + for (int i=0;i<72;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[246+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[708+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[354+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<145;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[384+i]; + for (int i=0;i<72;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[246+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[924+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[462+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<145;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[384+i]; + for (int i=0;i<72;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[246+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1140+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[570+i] = conditional_negate(min, sgn,zeros); } //Process group with 6 BNs - for (int i=0;i<65;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + for (int i=0;i<32;i++) { + sgn = ((__m512i*)cnProcBuf)[726+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1356+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[678+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<65;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + for (int i=0;i<32;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1452+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[726+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<65;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<32;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1548+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[774+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<65;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<32;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1644+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[822+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<65;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<32;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1740+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[870+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<65;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<32;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1836+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[918+i] = conditional_negate(min, sgn,zeros); } //Process group with 7 BNs - for (int i=0;i<41;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + for (int i=0;i<20;i++) { + sgn= ((__m512i*)cnProcBuf)[996+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1932+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[966+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<41;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + for (int i=0;i<20;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1992+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[996+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<41;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<20;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2052+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1026+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<41;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<20;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2112+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1056+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<41;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<20;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2172+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1086+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<41;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<20;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2232+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1116+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<41;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<20;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2292+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1146+i] = conditional_negate(min, sgn,zeros); } //Process group with 8 BNs - for (int i=0;i<17;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + for (int i=0;i<8;i++) { + sgn = ((__m512i*)cnProcBuf)[1188+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2352+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1176+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<17;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + for (int i=0;i<8;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2376+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1188+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<17;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<8;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2400+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1200+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<17;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<8;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2424+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1212+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<17;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<8;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2448+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1224+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<17;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<8;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2472+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1236+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<17;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<8;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2496+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1248+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<17;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<8;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2472+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2520+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1260+i] = conditional_negate(min, sgn,zeros); } //Process group with 9 BNs - for (int i=0;i<17;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + for (int i=0;i<8;i++) { + sgn = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2544+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1272+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<17;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + for (int i=0;i<8;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2568+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1284+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<17;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<8;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2592+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1296+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<17;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<8;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2616+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1308+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<17;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<8;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2640+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1320+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<17;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<8;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2664+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1332+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<17;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<8;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2688+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1344+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<17;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<8;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2712+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1356+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<17;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<8;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2736+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1368+i] = conditional_negate(min, sgn, zeros); } //Process group with 10 BNs - for (int i=0;i<9;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[1386+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2760+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1380+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<9;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2772+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1386+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<9;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2784+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1392+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<9;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2796+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1398+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<9;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2808+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1404+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<9;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2820+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1410+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<9;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2832+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1416+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<9;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2844+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1422+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<9;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2856+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1428+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<9;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2868+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1434+i] = conditional_negate(min,sgn,zeros); } //Process group with 19 BNs - for (int i=0;i<33;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + for (int i=0;i<16;i++) { + sgn = ((__m512i*)cnProcBuf)[1464+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2880+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1440+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<33;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + for (int i=0;i<16;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2928+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1464+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<33;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<16;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2976+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1488+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<33;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<16;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3024+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1512+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<33;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<16;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3072+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1536+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<33;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<16;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3120+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1560+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<33;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<16;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3168+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1584+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<33;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<16;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3216+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1608+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<33;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<16;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3264+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1632+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<33;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<16;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3312+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1656+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<33;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<16;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3360+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1680+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<33;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<16;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3408+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1704+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<33;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<16;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3456+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1728+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<33;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<16;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3504+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1752+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<33;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<16;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3552+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1776+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<33;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<16;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3600+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1800+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<33;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<16;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3648+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1824+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<33;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<16;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3696+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1848+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<33;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<16;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3744+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1872+i] = conditional_negate(min, sgn,zeros); } } diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z26_13_AVX512.c b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z26_13_AVX512.c index bd776e8af1..3a38553649 100644 --- a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z26_13_AVX512.c +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z26_13_AVX512.c @@ -1,2340 +1,2261 @@ #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; -} +#define conditional_negate(a,b,z) _mm512_mask_sub_epi8(a,_mm512_movepi8_mask(b),z,a) void nrLDPC_cnProc_BG1_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); + __m512i zmm0, min, sgn,zeros,maxLLR; + zeros = _mm512_setzero_si512(); maxLLR = _mm512_set1_epi8((char)127); - for (int i=0;i<2;i+=2) { - zmm0 = ((__m512i*)cnProcBuf)[6+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + for (int i=0;i<1;i+=2) { + sgn = ((__m512i*)cnProcBuf)[6+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[12+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[0+i] = _mm512_sign_epi16(min, sgn); - zmm0 = ((__m512i*)cnProcBuf)[7+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + ((__m512i*)cnProcBufRes)[0+i] = conditional_negate(min, sgn,zeros); + sgn = ((__m512i*)cnProcBuf)[7+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[13+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i+=2) { - zmm0 = ((__m512i*)cnProcBuf)[0+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + for (int i=0;i<1;i+=2) { + sgn = ((__m512i*)cnProcBuf)[0+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[12+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[12+i] = _mm512_sign_epi16(min, sgn); - zmm0 = ((__m512i*)cnProcBuf)[1+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + ((__m512i*)cnProcBufRes)[6+i] = conditional_negate(min, sgn,zeros); + sgn = ((__m512i*)cnProcBuf)[1+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[13+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[13+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[7+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i+=2) { - zmm0 = ((__m512i*)cnProcBuf)[0+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + for (int i=0;i<1;i+=2) { + sgn = ((__m512i*)cnProcBuf)[0+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[6+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[24+i] = _mm512_sign_epi16(min, sgn); - zmm0 = ((__m512i*)cnProcBuf)[1+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + ((__m512i*)cnProcBufRes)[12+i] = conditional_negate(min, sgn,zeros); + sgn = ((__m512i*)cnProcBuf)[1+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[7+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[25+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[13+i] = conditional_negate(min, sgn,zeros); } //Process group with 4 BNs - for (int i=0;i<6;i++) { - zmm0 = ((__m512i*)cnProcBuf)[66+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[96+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[48+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[78+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[126+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[108+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[36+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[18+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<6;i++) { - zmm0 = ((__m512i*)cnProcBuf)[36+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[96+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[18+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[78+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[126+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[108+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[96+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[48+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<6;i++) { - zmm0 = ((__m512i*)cnProcBuf)[36+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[66+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[18+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[48+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[126+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[108+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[156+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[78+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<6;i++) { - zmm0 = ((__m512i*)cnProcBuf)[36+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[66+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[18+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[48+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[96+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[78+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[216+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[108+i] = conditional_negate(min, sgn,zeros); } //Process group with 5 BNs - for (int i=0;i<16;i++) { - zmm0 = ((__m512i*)cnProcBuf)[384+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + for (int i=0;i<8;i++) { + sgn = ((__m512i*)cnProcBuf)[246+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[276+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[138+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<16;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + for (int i=0;i<8;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[492+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[246+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<16;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[384+i]; + for (int i=0;i<8;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[246+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[708+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[354+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<16;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[384+i]; + for (int i=0;i<8;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[246+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[924+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[462+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<16;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[384+i]; + for (int i=0;i<8;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[246+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1140+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[570+i] = conditional_negate(min, sgn,zeros); } //Process group with 6 BNs - for (int i=0;i<8;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[726+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1356+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[678+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<8;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1452+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[726+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<8;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1548+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[774+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<8;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1644+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[822+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<8;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1740+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[870+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<8;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1836+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[918+i] = conditional_negate(min, sgn,zeros); } //Process group with 7 BNs - for (int i=0;i<6;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + for (int i=0;i<3;i++) { + sgn= ((__m512i*)cnProcBuf)[996+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1932+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[966+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<6;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + for (int i=0;i<3;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1992+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[996+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<6;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<3;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2052+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1026+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<6;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<3;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2112+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1056+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<6;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<3;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2172+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1086+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<6;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<3;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2232+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1116+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<6;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<3;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2292+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1146+i] = conditional_negate(min, sgn,zeros); } //Process group with 8 BNs - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1188+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2352+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1176+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2376+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1188+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2400+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1200+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2424+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1212+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2448+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1224+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2472+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1236+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2496+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1248+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2472+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2520+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1260+i] = conditional_negate(min, sgn,zeros); } //Process group with 9 BNs - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2544+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1272+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2568+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1284+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2592+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1296+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2616+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1308+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2640+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1320+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2664+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1332+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2688+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1344+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2712+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1356+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2736+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1368+i] = conditional_negate(min, sgn, zeros); } //Process group with 10 BNs - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1386+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2760+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1380+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2772+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1386+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2784+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1392+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2796+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1398+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2808+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1404+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2820+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1410+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2832+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1416+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2844+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1422+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2856+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1428+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2868+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1434+i] = conditional_negate(min,sgn,zeros); } //Process group with 19 BNs - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1464+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2880+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1440+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2928+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1464+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2976+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1488+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3024+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1512+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3072+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1536+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3120+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1560+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3168+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1584+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3216+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1608+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3264+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1632+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3312+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1656+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3360+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1680+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3408+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1704+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3456+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1728+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3504+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1752+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3552+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1776+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3600+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1800+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3648+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1824+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3696+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1848+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3744+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1872+i] = conditional_negate(min, sgn,zeros); } } diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z288_13_AVX512.c b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z288_13_AVX512.c index 90553112b0..021d7ebc06 100644 --- a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z288_13_AVX512.c +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z288_13_AVX512.c @@ -1,2340 +1,2261 @@ #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; -} +#define conditional_negate(a,b,z) _mm512_mask_sub_epi8(a,_mm512_movepi8_mask(b),z,a) void nrLDPC_cnProc_BG1_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); + __m512i zmm0, min, sgn,zeros,maxLLR; + zeros = _mm512_setzero_si512(); maxLLR = _mm512_set1_epi8((char)127); - for (int i=0;i<10;i+=2) { - zmm0 = ((__m512i*)cnProcBuf)[6+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + for (int i=0;i<5;i+=2) { + sgn = ((__m512i*)cnProcBuf)[6+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[12+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[0+i] = _mm512_sign_epi16(min, sgn); - zmm0 = ((__m512i*)cnProcBuf)[7+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + ((__m512i*)cnProcBufRes)[0+i] = conditional_negate(min, sgn,zeros); + sgn = ((__m512i*)cnProcBuf)[7+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[13+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<10;i+=2) { - zmm0 = ((__m512i*)cnProcBuf)[0+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + for (int i=0;i<5;i+=2) { + sgn = ((__m512i*)cnProcBuf)[0+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[12+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[12+i] = _mm512_sign_epi16(min, sgn); - zmm0 = ((__m512i*)cnProcBuf)[1+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + ((__m512i*)cnProcBufRes)[6+i] = conditional_negate(min, sgn,zeros); + sgn = ((__m512i*)cnProcBuf)[1+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[13+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[13+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[7+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<10;i+=2) { - zmm0 = ((__m512i*)cnProcBuf)[0+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + for (int i=0;i<5;i+=2) { + sgn = ((__m512i*)cnProcBuf)[0+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[6+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[24+i] = _mm512_sign_epi16(min, sgn); - zmm0 = ((__m512i*)cnProcBuf)[1+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + ((__m512i*)cnProcBufRes)[12+i] = conditional_negate(min, sgn,zeros); + sgn = ((__m512i*)cnProcBuf)[1+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[7+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[25+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[13+i] = conditional_negate(min, sgn,zeros); } //Process group with 4 BNs - for (int i=0;i<46;i++) { - zmm0 = ((__m512i*)cnProcBuf)[66+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[96+i]; + for (int i=0;i<23;i++) { + sgn = ((__m512i*)cnProcBuf)[48+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[78+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[126+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[108+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[36+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[18+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<46;i++) { - zmm0 = ((__m512i*)cnProcBuf)[36+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[96+i]; + for (int i=0;i<23;i++) { + sgn = ((__m512i*)cnProcBuf)[18+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[78+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[126+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[108+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[96+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[48+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<46;i++) { - zmm0 = ((__m512i*)cnProcBuf)[36+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[66+i]; + for (int i=0;i<23;i++) { + sgn = ((__m512i*)cnProcBuf)[18+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[48+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[126+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[108+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[156+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[78+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<46;i++) { - zmm0 = ((__m512i*)cnProcBuf)[36+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[66+i]; + for (int i=0;i<23;i++) { + sgn = ((__m512i*)cnProcBuf)[18+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[48+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[96+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[78+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[216+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[108+i] = conditional_negate(min, sgn,zeros); } //Process group with 5 BNs - for (int i=0;i<163;i++) { - zmm0 = ((__m512i*)cnProcBuf)[384+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + for (int i=0;i<81;i++) { + sgn = ((__m512i*)cnProcBuf)[246+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[276+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[138+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<163;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + for (int i=0;i<81;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[492+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[246+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<163;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[384+i]; + for (int i=0;i<81;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[246+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[708+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[354+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<163;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[384+i]; + for (int i=0;i<81;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[246+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[924+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[462+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<163;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[384+i]; + for (int i=0;i<81;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[246+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1140+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[570+i] = conditional_negate(min, sgn,zeros); } //Process group with 6 BNs - for (int i=0;i<73;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + for (int i=0;i<36;i++) { + sgn = ((__m512i*)cnProcBuf)[726+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1356+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[678+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<73;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + for (int i=0;i<36;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1452+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[726+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<73;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<36;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1548+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[774+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<73;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<36;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1644+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[822+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<73;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<36;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1740+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[870+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<73;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<36;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1836+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[918+i] = conditional_negate(min, sgn,zeros); } //Process group with 7 BNs - for (int i=0;i<46;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + for (int i=0;i<23;i++) { + sgn= ((__m512i*)cnProcBuf)[996+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1932+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[966+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<46;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + for (int i=0;i<23;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1992+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[996+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<46;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<23;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2052+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1026+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<46;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<23;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2112+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1056+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<46;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<23;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2172+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1086+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<46;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<23;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2232+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1116+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<46;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<23;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2292+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1146+i] = conditional_negate(min, sgn,zeros); } //Process group with 8 BNs - for (int i=0;i<19;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + for (int i=0;i<9;i++) { + sgn = ((__m512i*)cnProcBuf)[1188+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2352+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1176+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<19;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + for (int i=0;i<9;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2376+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1188+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<19;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<9;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2400+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1200+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<19;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<9;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2424+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1212+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<19;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<9;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2448+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1224+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<19;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<9;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2472+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1236+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<19;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<9;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2496+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1248+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<19;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<9;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2472+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2520+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1260+i] = conditional_negate(min, sgn,zeros); } //Process group with 9 BNs - for (int i=0;i<19;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + for (int i=0;i<9;i++) { + sgn = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2544+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1272+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<19;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + for (int i=0;i<9;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2568+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1284+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<19;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<9;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2592+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1296+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<19;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<9;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2616+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1308+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<19;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<9;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2640+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1320+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<19;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<9;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2664+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1332+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<19;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<9;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2688+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1344+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<19;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<9;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2712+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1356+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<19;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<9;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2736+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1368+i] = conditional_negate(min, sgn, zeros); } //Process group with 10 BNs - for (int i=0;i<10;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + for (int i=0;i<5;i++) { + sgn = ((__m512i*)cnProcBuf)[1386+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2760+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1380+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<10;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + for (int i=0;i<5;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2772+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1386+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<10;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<5;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2784+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1392+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<10;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<5;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2796+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1398+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<10;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<5;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2808+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1404+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<10;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<5;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2820+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1410+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<10;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<5;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2832+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1416+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<10;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<5;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2844+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1422+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<10;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<5;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2856+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1428+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<10;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<5;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2868+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1434+i] = conditional_negate(min,sgn,zeros); } //Process group with 19 BNs - for (int i=0;i<37;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + for (int i=0;i<18;i++) { + sgn = ((__m512i*)cnProcBuf)[1464+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2880+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1440+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<37;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + for (int i=0;i<18;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2928+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1464+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<37;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<18;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2976+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1488+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<37;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<18;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3024+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1512+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<37;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<18;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3072+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1536+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<37;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<18;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3120+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1560+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<37;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<18;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3168+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1584+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<37;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<18;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3216+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1608+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<37;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<18;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3264+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1632+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<37;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<18;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3312+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1656+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<37;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<18;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3360+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1680+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<37;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<18;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3408+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1704+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<37;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<18;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3456+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1728+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<37;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<18;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3504+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1752+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<37;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<18;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3552+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1776+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<37;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<18;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3600+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1800+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<37;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<18;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3648+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1824+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<37;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<18;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3696+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1848+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<37;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<18;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3744+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1872+i] = conditional_negate(min, sgn,zeros); } } diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z28_13_AVX512.c b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z28_13_AVX512.c index aca2ba32eb..f9a3dc4d78 100644 --- a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z28_13_AVX512.c +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z28_13_AVX512.c @@ -1,2340 +1,2261 @@ #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; -} +#define conditional_negate(a,b,z) _mm512_mask_sub_epi8(a,_mm512_movepi8_mask(b),z,a) void nrLDPC_cnProc_BG1_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); + __m512i zmm0, min, sgn,zeros,maxLLR; + zeros = _mm512_setzero_si512(); maxLLR = _mm512_set1_epi8((char)127); - for (int i=0;i<2;i+=2) { - zmm0 = ((__m512i*)cnProcBuf)[6+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + for (int i=0;i<1;i+=2) { + sgn = ((__m512i*)cnProcBuf)[6+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[12+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[0+i] = _mm512_sign_epi16(min, sgn); - zmm0 = ((__m512i*)cnProcBuf)[7+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + ((__m512i*)cnProcBufRes)[0+i] = conditional_negate(min, sgn,zeros); + sgn = ((__m512i*)cnProcBuf)[7+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[13+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i+=2) { - zmm0 = ((__m512i*)cnProcBuf)[0+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + for (int i=0;i<1;i+=2) { + sgn = ((__m512i*)cnProcBuf)[0+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[12+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[12+i] = _mm512_sign_epi16(min, sgn); - zmm0 = ((__m512i*)cnProcBuf)[1+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + ((__m512i*)cnProcBufRes)[6+i] = conditional_negate(min, sgn,zeros); + sgn = ((__m512i*)cnProcBuf)[1+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[13+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[13+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[7+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i+=2) { - zmm0 = ((__m512i*)cnProcBuf)[0+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + for (int i=0;i<1;i+=2) { + sgn = ((__m512i*)cnProcBuf)[0+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[6+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[24+i] = _mm512_sign_epi16(min, sgn); - zmm0 = ((__m512i*)cnProcBuf)[1+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + ((__m512i*)cnProcBufRes)[12+i] = conditional_negate(min, sgn,zeros); + sgn = ((__m512i*)cnProcBuf)[1+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[7+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[25+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[13+i] = conditional_negate(min, sgn,zeros); } //Process group with 4 BNs - for (int i=0;i<6;i++) { - zmm0 = ((__m512i*)cnProcBuf)[66+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[96+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[48+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[78+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[126+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[108+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[36+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[18+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<6;i++) { - zmm0 = ((__m512i*)cnProcBuf)[36+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[96+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[18+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[78+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[126+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[108+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[96+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[48+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<6;i++) { - zmm0 = ((__m512i*)cnProcBuf)[36+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[66+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[18+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[48+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[126+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[108+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[156+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[78+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<6;i++) { - zmm0 = ((__m512i*)cnProcBuf)[36+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[66+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[18+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[48+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[96+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[78+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[216+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[108+i] = conditional_negate(min, sgn,zeros); } //Process group with 5 BNs - for (int i=0;i<17;i++) { - zmm0 = ((__m512i*)cnProcBuf)[384+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + for (int i=0;i<8;i++) { + sgn = ((__m512i*)cnProcBuf)[246+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[276+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[138+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<17;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + for (int i=0;i<8;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[492+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[246+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<17;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[384+i]; + for (int i=0;i<8;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[246+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[708+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[354+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<17;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[384+i]; + for (int i=0;i<8;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[246+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[924+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[462+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<17;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[384+i]; + for (int i=0;i<8;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[246+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1140+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[570+i] = conditional_negate(min, sgn,zeros); } //Process group with 6 BNs - for (int i=0;i<8;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[726+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1356+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[678+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<8;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1452+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[726+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<8;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1548+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[774+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<8;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1644+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[822+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<8;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1740+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[870+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<8;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1836+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[918+i] = conditional_negate(min, sgn,zeros); } //Process group with 7 BNs - for (int i=0;i<6;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + for (int i=0;i<3;i++) { + sgn= ((__m512i*)cnProcBuf)[996+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1932+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[966+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<6;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + for (int i=0;i<3;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1992+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[996+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<6;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<3;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2052+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1026+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<6;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<3;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2112+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1056+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<6;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<3;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2172+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1086+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<6;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<3;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2232+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1116+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<6;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<3;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2292+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1146+i] = conditional_negate(min, sgn,zeros); } //Process group with 8 BNs - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1188+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2352+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1176+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2376+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1188+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2400+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1200+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2424+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1212+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2448+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1224+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2472+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1236+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2496+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1248+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2472+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2520+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1260+i] = conditional_negate(min, sgn,zeros); } //Process group with 9 BNs - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2544+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1272+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2568+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1284+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2592+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1296+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2616+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1308+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2640+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1320+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2664+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1332+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2688+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1344+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2712+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1356+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2736+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1368+i] = conditional_negate(min, sgn, zeros); } //Process group with 10 BNs - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1386+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2760+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1380+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2772+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1386+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2784+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1392+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2796+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1398+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2808+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1404+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2820+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1410+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2832+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1416+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2844+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1422+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2856+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1428+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2868+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1434+i] = conditional_negate(min,sgn,zeros); } //Process group with 19 BNs - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1464+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2880+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1440+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2928+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1464+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2976+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1488+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3024+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1512+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3072+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1536+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3120+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1560+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3168+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1584+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3216+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1608+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3264+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1632+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3312+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1656+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3360+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1680+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3408+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1704+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3456+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1728+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3504+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1752+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3552+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1776+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3600+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1800+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3648+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1824+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3696+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1848+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3744+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1872+i] = conditional_negate(min, sgn,zeros); } } diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z2_13_AVX512.c b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z2_13_AVX512.c index 92237b43f2..28cd588dd5 100644 --- a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z2_13_AVX512.c +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z2_13_AVX512.c @@ -1,2340 +1,2261 @@ #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; -} +#define conditional_negate(a,b,z) _mm512_mask_sub_epi8(a,_mm512_movepi8_mask(b),z,a) void nrLDPC_cnProc_BG1_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); + __m512i zmm0, min, sgn,zeros,maxLLR; + zeros = _mm512_setzero_si512(); maxLLR = _mm512_set1_epi8((char)127); - for (int i=0;i<2;i+=2) { - zmm0 = ((__m512i*)cnProcBuf)[6+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + for (int i=0;i<1;i+=2) { + sgn = ((__m512i*)cnProcBuf)[6+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[12+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[0+i] = _mm512_sign_epi16(min, sgn); - zmm0 = ((__m512i*)cnProcBuf)[7+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + ((__m512i*)cnProcBufRes)[0+i] = conditional_negate(min, sgn,zeros); + sgn = ((__m512i*)cnProcBuf)[7+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[13+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i+=2) { - zmm0 = ((__m512i*)cnProcBuf)[0+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + for (int i=0;i<1;i+=2) { + sgn = ((__m512i*)cnProcBuf)[0+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[12+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[12+i] = _mm512_sign_epi16(min, sgn); - zmm0 = ((__m512i*)cnProcBuf)[1+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + ((__m512i*)cnProcBufRes)[6+i] = conditional_negate(min, sgn,zeros); + sgn = ((__m512i*)cnProcBuf)[1+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[13+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[13+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[7+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i+=2) { - zmm0 = ((__m512i*)cnProcBuf)[0+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + for (int i=0;i<1;i+=2) { + sgn = ((__m512i*)cnProcBuf)[0+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[6+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[24+i] = _mm512_sign_epi16(min, sgn); - zmm0 = ((__m512i*)cnProcBuf)[1+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + ((__m512i*)cnProcBufRes)[12+i] = conditional_negate(min, sgn,zeros); + sgn = ((__m512i*)cnProcBuf)[1+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[7+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[25+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[13+i] = conditional_negate(min, sgn,zeros); } //Process group with 4 BNs - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[66+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[96+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[48+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[78+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[126+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[108+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[36+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[18+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[36+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[96+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[18+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[78+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[126+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[108+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[96+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[48+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[36+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[66+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[18+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[48+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[126+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[108+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[156+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[78+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[36+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[66+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[18+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[48+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[96+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[78+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[216+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[108+i] = conditional_negate(min, sgn,zeros); } //Process group with 5 BNs - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[384+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[246+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[276+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[138+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[492+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[246+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[384+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[246+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[708+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[354+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[384+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[246+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[924+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[462+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[384+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[246+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1140+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[570+i] = conditional_negate(min, sgn,zeros); } //Process group with 6 BNs - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[726+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1356+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[678+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1452+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[726+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1548+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[774+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1644+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[822+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1740+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[870+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1836+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[918+i] = conditional_negate(min, sgn,zeros); } //Process group with 7 BNs - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + for (int i=0;i<1;i++) { + sgn= ((__m512i*)cnProcBuf)[996+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1932+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[966+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + for (int i=0;i<1;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1992+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[996+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<1;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2052+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1026+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<1;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2112+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1056+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<1;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2172+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1086+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<1;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2232+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1116+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<1;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2292+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1146+i] = conditional_negate(min, sgn,zeros); } //Process group with 8 BNs - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1188+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2352+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1176+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2376+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1188+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2400+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1200+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2424+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1212+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2448+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1224+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2472+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1236+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2496+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1248+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2472+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2520+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1260+i] = conditional_negate(min, sgn,zeros); } //Process group with 9 BNs - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2544+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1272+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2568+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1284+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2592+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1296+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2616+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1308+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2640+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1320+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2664+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1332+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2688+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1344+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2712+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1356+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2736+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1368+i] = conditional_negate(min, sgn, zeros); } //Process group with 10 BNs - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1386+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2760+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1380+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2772+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1386+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2784+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1392+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2796+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1398+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2808+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1404+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2820+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1410+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2832+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1416+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2844+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1422+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2856+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1428+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2868+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1434+i] = conditional_negate(min,sgn,zeros); } //Process group with 19 BNs - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1464+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2880+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1440+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2928+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1464+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2976+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1488+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3024+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1512+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3072+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1536+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3120+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1560+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3168+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1584+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3216+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1608+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3264+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1632+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3312+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1656+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3360+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1680+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3408+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1704+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3456+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1728+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3504+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1752+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3552+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1776+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3600+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1800+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3648+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1824+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3696+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1848+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3744+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1872+i] = conditional_negate(min, sgn,zeros); } } diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z30_13_AVX512.c b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z30_13_AVX512.c index b08797b2c3..3577d0408c 100644 --- a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z30_13_AVX512.c +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z30_13_AVX512.c @@ -1,2340 +1,2261 @@ #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; -} +#define conditional_negate(a,b,z) _mm512_mask_sub_epi8(a,_mm512_movepi8_mask(b),z,a) void nrLDPC_cnProc_BG1_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); + __m512i zmm0, min, sgn,zeros,maxLLR; + zeros = _mm512_setzero_si512(); maxLLR = _mm512_set1_epi8((char)127); - for (int i=0;i<2;i+=2) { - zmm0 = ((__m512i*)cnProcBuf)[6+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + for (int i=0;i<1;i+=2) { + sgn = ((__m512i*)cnProcBuf)[6+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[12+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[0+i] = _mm512_sign_epi16(min, sgn); - zmm0 = ((__m512i*)cnProcBuf)[7+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + ((__m512i*)cnProcBufRes)[0+i] = conditional_negate(min, sgn,zeros); + sgn = ((__m512i*)cnProcBuf)[7+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[13+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i+=2) { - zmm0 = ((__m512i*)cnProcBuf)[0+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + for (int i=0;i<1;i+=2) { + sgn = ((__m512i*)cnProcBuf)[0+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[12+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[12+i] = _mm512_sign_epi16(min, sgn); - zmm0 = ((__m512i*)cnProcBuf)[1+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + ((__m512i*)cnProcBufRes)[6+i] = conditional_negate(min, sgn,zeros); + sgn = ((__m512i*)cnProcBuf)[1+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[13+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[13+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[7+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i+=2) { - zmm0 = ((__m512i*)cnProcBuf)[0+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + for (int i=0;i<1;i+=2) { + sgn = ((__m512i*)cnProcBuf)[0+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[6+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[24+i] = _mm512_sign_epi16(min, sgn); - zmm0 = ((__m512i*)cnProcBuf)[1+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + ((__m512i*)cnProcBufRes)[12+i] = conditional_negate(min, sgn,zeros); + sgn = ((__m512i*)cnProcBuf)[1+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[7+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[25+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[13+i] = conditional_negate(min, sgn,zeros); } //Process group with 4 BNs - for (int i=0;i<6;i++) { - zmm0 = ((__m512i*)cnProcBuf)[66+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[96+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[48+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[78+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[126+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[108+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[36+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[18+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<6;i++) { - zmm0 = ((__m512i*)cnProcBuf)[36+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[96+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[18+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[78+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[126+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[108+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[96+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[48+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<6;i++) { - zmm0 = ((__m512i*)cnProcBuf)[36+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[66+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[18+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[48+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[126+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[108+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[156+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[78+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<6;i++) { - zmm0 = ((__m512i*)cnProcBuf)[36+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[66+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[18+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[48+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[96+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[78+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[216+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[108+i] = conditional_negate(min, sgn,zeros); } //Process group with 5 BNs - for (int i=0;i<18;i++) { - zmm0 = ((__m512i*)cnProcBuf)[384+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + for (int i=0;i<9;i++) { + sgn = ((__m512i*)cnProcBuf)[246+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[276+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[138+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<18;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + for (int i=0;i<9;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[492+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[246+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<18;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[384+i]; + for (int i=0;i<9;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[246+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[708+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[354+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<18;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[384+i]; + for (int i=0;i<9;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[246+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[924+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[462+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<18;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[384+i]; + for (int i=0;i<9;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[246+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1140+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[570+i] = conditional_negate(min, sgn,zeros); } //Process group with 6 BNs - for (int i=0;i<9;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[726+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1356+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[678+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<9;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1452+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[726+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<9;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1548+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[774+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<9;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1644+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[822+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<9;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1740+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[870+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<9;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1836+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[918+i] = conditional_negate(min, sgn,zeros); } //Process group with 7 BNs - for (int i=0;i<6;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + for (int i=0;i<3;i++) { + sgn= ((__m512i*)cnProcBuf)[996+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1932+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[966+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<6;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + for (int i=0;i<3;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1992+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[996+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<6;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<3;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2052+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1026+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<6;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<3;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2112+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1056+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<6;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<3;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2172+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1086+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<6;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<3;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2232+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1116+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<6;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<3;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2292+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1146+i] = conditional_negate(min, sgn,zeros); } //Process group with 8 BNs - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1188+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2352+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1176+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2376+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1188+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2400+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1200+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2424+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1212+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2448+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1224+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2472+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1236+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2496+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1248+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2472+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2520+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1260+i] = conditional_negate(min, sgn,zeros); } //Process group with 9 BNs - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2544+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1272+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2568+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1284+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2592+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1296+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2616+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1308+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2640+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1320+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2664+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1332+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2688+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1344+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2712+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1356+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2736+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1368+i] = conditional_negate(min, sgn, zeros); } //Process group with 10 BNs - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1386+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2760+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1380+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2772+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1386+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2784+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1392+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2796+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1398+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2808+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1404+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2820+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1410+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2832+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1416+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2844+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1422+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2856+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1428+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2868+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1434+i] = conditional_negate(min,sgn,zeros); } //Process group with 19 BNs - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1464+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2880+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1440+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2928+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1464+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2976+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1488+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3024+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1512+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3072+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1536+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3120+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1560+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3168+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1584+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3216+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1608+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3264+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1632+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3312+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1656+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3360+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1680+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3408+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1704+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3456+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1728+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3504+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1752+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3552+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1776+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3600+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1800+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3648+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1824+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3696+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1848+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3744+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1872+i] = conditional_negate(min, sgn,zeros); } } diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z320_13_AVX512.c b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z320_13_AVX512.c index 09f4b52d2f..481d3cfb57 100644 --- a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z320_13_AVX512.c +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z320_13_AVX512.c @@ -1,2340 +1,2261 @@ #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; -} +#define conditional_negate(a,b,z) _mm512_mask_sub_epi8(a,_mm512_movepi8_mask(b),z,a) void nrLDPC_cnProc_BG1_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); + __m512i zmm0, min, sgn,zeros,maxLLR; + zeros = _mm512_setzero_si512(); maxLLR = _mm512_set1_epi8((char)127); - for (int i=0;i<11;i+=2) { - zmm0 = ((__m512i*)cnProcBuf)[6+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + for (int i=0;i<5;i+=2) { + sgn = ((__m512i*)cnProcBuf)[6+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[12+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[0+i] = _mm512_sign_epi16(min, sgn); - zmm0 = ((__m512i*)cnProcBuf)[7+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + ((__m512i*)cnProcBufRes)[0+i] = conditional_negate(min, sgn,zeros); + sgn = ((__m512i*)cnProcBuf)[7+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[13+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<11;i+=2) { - zmm0 = ((__m512i*)cnProcBuf)[0+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + for (int i=0;i<5;i+=2) { + sgn = ((__m512i*)cnProcBuf)[0+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[12+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[12+i] = _mm512_sign_epi16(min, sgn); - zmm0 = ((__m512i*)cnProcBuf)[1+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + ((__m512i*)cnProcBufRes)[6+i] = conditional_negate(min, sgn,zeros); + sgn = ((__m512i*)cnProcBuf)[1+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[13+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[13+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[7+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<11;i+=2) { - zmm0 = ((__m512i*)cnProcBuf)[0+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + for (int i=0;i<5;i+=2) { + sgn = ((__m512i*)cnProcBuf)[0+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[6+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[24+i] = _mm512_sign_epi16(min, sgn); - zmm0 = ((__m512i*)cnProcBuf)[1+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + ((__m512i*)cnProcBufRes)[12+i] = conditional_negate(min, sgn,zeros); + sgn = ((__m512i*)cnProcBuf)[1+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[7+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[25+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[13+i] = conditional_negate(min, sgn,zeros); } //Process group with 4 BNs - for (int i=0;i<51;i++) { - zmm0 = ((__m512i*)cnProcBuf)[66+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[96+i]; + for (int i=0;i<25;i++) { + sgn = ((__m512i*)cnProcBuf)[48+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[78+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[126+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[108+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[36+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[18+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<51;i++) { - zmm0 = ((__m512i*)cnProcBuf)[36+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[96+i]; + for (int i=0;i<25;i++) { + sgn = ((__m512i*)cnProcBuf)[18+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[78+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[126+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[108+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[96+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[48+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<51;i++) { - zmm0 = ((__m512i*)cnProcBuf)[36+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[66+i]; + for (int i=0;i<25;i++) { + sgn = ((__m512i*)cnProcBuf)[18+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[48+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[126+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[108+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[156+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[78+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<51;i++) { - zmm0 = ((__m512i*)cnProcBuf)[36+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[66+i]; + for (int i=0;i<25;i++) { + sgn = ((__m512i*)cnProcBuf)[18+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[48+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[96+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[78+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[216+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[108+i] = conditional_negate(min, sgn,zeros); } //Process group with 5 BNs - for (int i=0;i<181;i++) { - zmm0 = ((__m512i*)cnProcBuf)[384+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + for (int i=0;i<90;i++) { + sgn = ((__m512i*)cnProcBuf)[246+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[276+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[138+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<181;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + for (int i=0;i<90;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[492+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[246+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<181;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[384+i]; + for (int i=0;i<90;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[246+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[708+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[354+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<181;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[384+i]; + for (int i=0;i<90;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[246+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[924+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[462+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<181;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[384+i]; + for (int i=0;i<90;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[246+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1140+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[570+i] = conditional_negate(min, sgn,zeros); } //Process group with 6 BNs - for (int i=0;i<81;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + for (int i=0;i<40;i++) { + sgn = ((__m512i*)cnProcBuf)[726+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1356+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[678+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<81;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + for (int i=0;i<40;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1452+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[726+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<81;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<40;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1548+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[774+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<81;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<40;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1644+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[822+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<81;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<40;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1740+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[870+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<81;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<40;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1836+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[918+i] = conditional_negate(min, sgn,zeros); } //Process group with 7 BNs - for (int i=0;i<51;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + for (int i=0;i<25;i++) { + sgn= ((__m512i*)cnProcBuf)[996+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1932+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[966+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<51;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + for (int i=0;i<25;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1992+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[996+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<51;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<25;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2052+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1026+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<51;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<25;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2112+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1056+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<51;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<25;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2172+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1086+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<51;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<25;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2232+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1116+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<51;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<25;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2292+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1146+i] = conditional_negate(min, sgn,zeros); } //Process group with 8 BNs - for (int i=0;i<21;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + for (int i=0;i<10;i++) { + sgn = ((__m512i*)cnProcBuf)[1188+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2352+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1176+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<21;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + for (int i=0;i<10;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2376+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1188+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<21;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<10;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2400+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1200+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<21;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<10;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2424+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1212+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<21;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<10;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2448+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1224+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<21;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<10;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2472+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1236+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<21;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<10;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2496+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1248+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<21;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<10;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2472+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2520+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1260+i] = conditional_negate(min, sgn,zeros); } //Process group with 9 BNs - for (int i=0;i<21;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + for (int i=0;i<10;i++) { + sgn = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2544+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1272+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<21;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + for (int i=0;i<10;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2568+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1284+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<21;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<10;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2592+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1296+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<21;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<10;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2616+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1308+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<21;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<10;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2640+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1320+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<21;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<10;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2664+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1332+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<21;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<10;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2688+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1344+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<21;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<10;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2712+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1356+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<21;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<10;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2736+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1368+i] = conditional_negate(min, sgn, zeros); } //Process group with 10 BNs - for (int i=0;i<11;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + for (int i=0;i<5;i++) { + sgn = ((__m512i*)cnProcBuf)[1386+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2760+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1380+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<11;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + for (int i=0;i<5;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2772+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1386+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<11;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<5;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2784+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1392+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<11;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<5;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2796+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1398+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<11;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<5;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2808+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1404+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<11;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<5;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2820+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1410+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<11;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<5;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2832+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1416+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<11;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<5;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2844+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1422+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<11;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<5;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2856+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1428+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<11;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<5;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2868+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1434+i] = conditional_negate(min,sgn,zeros); } //Process group with 19 BNs - for (int i=0;i<41;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + for (int i=0;i<20;i++) { + sgn = ((__m512i*)cnProcBuf)[1464+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2880+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1440+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<41;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + for (int i=0;i<20;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2928+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1464+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<41;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<20;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2976+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1488+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<41;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<20;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3024+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1512+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<41;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<20;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3072+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1536+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<41;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<20;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3120+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1560+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<41;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<20;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3168+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1584+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<41;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<20;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3216+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1608+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<41;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<20;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3264+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1632+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<41;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<20;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3312+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1656+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<41;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<20;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3360+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1680+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<41;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<20;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3408+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1704+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<41;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<20;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3456+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1728+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<41;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<20;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3504+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1752+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<41;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<20;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3552+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1776+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<41;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<20;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3600+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1800+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<41;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<20;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3648+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1824+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<41;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<20;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3696+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1848+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<41;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<20;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3744+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1872+i] = conditional_negate(min, sgn,zeros); } } diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z32_13_AVX512.c b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z32_13_AVX512.c index a09cfac995..948ef9011e 100644 --- a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z32_13_AVX512.c +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z32_13_AVX512.c @@ -1,2340 +1,2261 @@ #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; -} +#define conditional_negate(a,b,z) _mm512_mask_sub_epi8(a,_mm512_movepi8_mask(b),z,a) void nrLDPC_cnProc_BG1_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); + __m512i zmm0, min, sgn,zeros,maxLLR; + zeros = _mm512_setzero_si512(); maxLLR = _mm512_set1_epi8((char)127); - for (int i=0;i<2;i+=2) { - zmm0 = ((__m512i*)cnProcBuf)[6+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + for (int i=0;i<1;i+=2) { + sgn = ((__m512i*)cnProcBuf)[6+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[12+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[0+i] = _mm512_sign_epi16(min, sgn); - zmm0 = ((__m512i*)cnProcBuf)[7+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + ((__m512i*)cnProcBufRes)[0+i] = conditional_negate(min, sgn,zeros); + sgn = ((__m512i*)cnProcBuf)[7+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[13+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i+=2) { - zmm0 = ((__m512i*)cnProcBuf)[0+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + for (int i=0;i<1;i+=2) { + sgn = ((__m512i*)cnProcBuf)[0+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[12+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[12+i] = _mm512_sign_epi16(min, sgn); - zmm0 = ((__m512i*)cnProcBuf)[1+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + ((__m512i*)cnProcBufRes)[6+i] = conditional_negate(min, sgn,zeros); + sgn = ((__m512i*)cnProcBuf)[1+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[13+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[13+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[7+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i+=2) { - zmm0 = ((__m512i*)cnProcBuf)[0+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + for (int i=0;i<1;i+=2) { + sgn = ((__m512i*)cnProcBuf)[0+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[6+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[24+i] = _mm512_sign_epi16(min, sgn); - zmm0 = ((__m512i*)cnProcBuf)[1+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + ((__m512i*)cnProcBufRes)[12+i] = conditional_negate(min, sgn,zeros); + sgn = ((__m512i*)cnProcBuf)[1+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[7+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[25+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[13+i] = conditional_negate(min, sgn,zeros); } //Process group with 4 BNs - for (int i=0;i<6;i++) { - zmm0 = ((__m512i*)cnProcBuf)[66+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[96+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[48+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[78+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[126+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[108+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[36+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[18+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<6;i++) { - zmm0 = ((__m512i*)cnProcBuf)[36+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[96+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[18+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[78+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[126+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[108+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[96+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[48+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<6;i++) { - zmm0 = ((__m512i*)cnProcBuf)[36+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[66+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[18+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[48+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[126+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[108+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[156+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[78+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<6;i++) { - zmm0 = ((__m512i*)cnProcBuf)[36+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[66+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[18+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[48+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[96+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[78+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[216+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[108+i] = conditional_negate(min, sgn,zeros); } //Process group with 5 BNs - for (int i=0;i<19;i++) { - zmm0 = ((__m512i*)cnProcBuf)[384+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + for (int i=0;i<9;i++) { + sgn = ((__m512i*)cnProcBuf)[246+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[276+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[138+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<19;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + for (int i=0;i<9;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[492+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[246+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<19;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[384+i]; + for (int i=0;i<9;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[246+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[708+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[354+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<19;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[384+i]; + for (int i=0;i<9;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[246+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[924+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[462+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<19;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[384+i]; + for (int i=0;i<9;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[246+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1140+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[570+i] = conditional_negate(min, sgn,zeros); } //Process group with 6 BNs - for (int i=0;i<9;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[726+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1356+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[678+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<9;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1452+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[726+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<9;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1548+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[774+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<9;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1644+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[822+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<9;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1740+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[870+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<9;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1836+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[918+i] = conditional_negate(min, sgn,zeros); } //Process group with 7 BNs - for (int i=0;i<6;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + for (int i=0;i<3;i++) { + sgn= ((__m512i*)cnProcBuf)[996+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1932+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[966+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<6;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + for (int i=0;i<3;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1992+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[996+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<6;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<3;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2052+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1026+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<6;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<3;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2112+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1056+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<6;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<3;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2172+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1086+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<6;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<3;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2232+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1116+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<6;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<3;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2292+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1146+i] = conditional_negate(min, sgn,zeros); } //Process group with 8 BNs - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1188+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2352+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1176+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2376+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1188+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2400+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1200+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2424+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1212+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2448+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1224+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2472+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1236+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2496+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1248+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2472+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2520+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1260+i] = conditional_negate(min, sgn,zeros); } //Process group with 9 BNs - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2544+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1272+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2568+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1284+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2592+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1296+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2616+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1308+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2640+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1320+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2664+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1332+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2688+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1344+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2712+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1356+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2736+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1368+i] = conditional_negate(min, sgn, zeros); } //Process group with 10 BNs - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1386+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2760+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1380+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2772+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1386+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2784+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1392+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2796+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1398+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2808+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1404+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2820+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1410+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2832+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1416+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2844+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1422+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2856+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1428+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2868+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1434+i] = conditional_negate(min,sgn,zeros); } //Process group with 19 BNs - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1464+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2880+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1440+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2928+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1464+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2976+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1488+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3024+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1512+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3072+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1536+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3120+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1560+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3168+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1584+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3216+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1608+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3264+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1632+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3312+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1656+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3360+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1680+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3408+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1704+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3456+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1728+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3504+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1752+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3552+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1776+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3600+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1800+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3648+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1824+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3696+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1848+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3744+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1872+i] = conditional_negate(min, sgn,zeros); } } diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z352_13_AVX512.c b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z352_13_AVX512.c index d9e160a715..0e1403eab1 100644 --- a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z352_13_AVX512.c +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z352_13_AVX512.c @@ -1,2340 +1,2261 @@ #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; -} +#define conditional_negate(a,b,z) _mm512_mask_sub_epi8(a,_mm512_movepi8_mask(b),z,a) void nrLDPC_cnProc_BG1_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); + __m512i zmm0, min, sgn,zeros,maxLLR; + zeros = _mm512_setzero_si512(); maxLLR = _mm512_set1_epi8((char)127); - for (int i=0;i<12;i+=2) { - zmm0 = ((__m512i*)cnProcBuf)[6+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + for (int i=0;i<6;i+=2) { + sgn = ((__m512i*)cnProcBuf)[6+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[12+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[0+i] = _mm512_sign_epi16(min, sgn); - zmm0 = ((__m512i*)cnProcBuf)[7+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + ((__m512i*)cnProcBufRes)[0+i] = conditional_negate(min, sgn,zeros); + sgn = ((__m512i*)cnProcBuf)[7+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[13+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<12;i+=2) { - zmm0 = ((__m512i*)cnProcBuf)[0+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + for (int i=0;i<6;i+=2) { + sgn = ((__m512i*)cnProcBuf)[0+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[12+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[12+i] = _mm512_sign_epi16(min, sgn); - zmm0 = ((__m512i*)cnProcBuf)[1+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + ((__m512i*)cnProcBufRes)[6+i] = conditional_negate(min, sgn,zeros); + sgn = ((__m512i*)cnProcBuf)[1+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[13+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[13+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[7+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<12;i+=2) { - zmm0 = ((__m512i*)cnProcBuf)[0+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + for (int i=0;i<6;i+=2) { + sgn = ((__m512i*)cnProcBuf)[0+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[6+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[24+i] = _mm512_sign_epi16(min, sgn); - zmm0 = ((__m512i*)cnProcBuf)[1+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + ((__m512i*)cnProcBufRes)[12+i] = conditional_negate(min, sgn,zeros); + sgn = ((__m512i*)cnProcBuf)[1+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[7+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[25+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[13+i] = conditional_negate(min, sgn,zeros); } //Process group with 4 BNs - for (int i=0;i<56;i++) { - zmm0 = ((__m512i*)cnProcBuf)[66+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[96+i]; + for (int i=0;i<28;i++) { + sgn = ((__m512i*)cnProcBuf)[48+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[78+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[126+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[108+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[36+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[18+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<56;i++) { - zmm0 = ((__m512i*)cnProcBuf)[36+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[96+i]; + for (int i=0;i<28;i++) { + sgn = ((__m512i*)cnProcBuf)[18+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[78+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[126+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[108+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[96+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[48+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<56;i++) { - zmm0 = ((__m512i*)cnProcBuf)[36+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[66+i]; + for (int i=0;i<28;i++) { + sgn = ((__m512i*)cnProcBuf)[18+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[48+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[126+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[108+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[156+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[78+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<56;i++) { - zmm0 = ((__m512i*)cnProcBuf)[36+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[66+i]; + for (int i=0;i<28;i++) { + sgn = ((__m512i*)cnProcBuf)[18+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[48+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[96+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[78+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[216+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[108+i] = conditional_negate(min, sgn,zeros); } //Process group with 5 BNs - for (int i=0;i<199;i++) { - zmm0 = ((__m512i*)cnProcBuf)[384+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + for (int i=0;i<99;i++) { + sgn = ((__m512i*)cnProcBuf)[246+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[276+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[138+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<199;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + for (int i=0;i<99;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[492+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[246+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<199;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[384+i]; + for (int i=0;i<99;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[246+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[708+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[354+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<199;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[384+i]; + for (int i=0;i<99;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[246+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[924+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[462+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<199;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[384+i]; + for (int i=0;i<99;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[246+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1140+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[570+i] = conditional_negate(min, sgn,zeros); } //Process group with 6 BNs - for (int i=0;i<89;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + for (int i=0;i<44;i++) { + sgn = ((__m512i*)cnProcBuf)[726+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1356+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[678+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<89;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + for (int i=0;i<44;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1452+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[726+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<89;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<44;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1548+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[774+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<89;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<44;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1644+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[822+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<89;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<44;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1740+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[870+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<89;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<44;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1836+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[918+i] = conditional_negate(min, sgn,zeros); } //Process group with 7 BNs - for (int i=0;i<56;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + for (int i=0;i<28;i++) { + sgn= ((__m512i*)cnProcBuf)[996+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1932+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[966+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<56;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + for (int i=0;i<28;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1992+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[996+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<56;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<28;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2052+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1026+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<56;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<28;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2112+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1056+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<56;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<28;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2172+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1086+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<56;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<28;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2232+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1116+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<56;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<28;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2292+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1146+i] = conditional_negate(min, sgn,zeros); } //Process group with 8 BNs - for (int i=0;i<23;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + for (int i=0;i<11;i++) { + sgn = ((__m512i*)cnProcBuf)[1188+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2352+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1176+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<23;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + for (int i=0;i<11;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2376+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1188+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<23;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<11;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2400+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1200+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<23;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<11;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2424+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1212+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<23;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<11;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2448+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1224+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<23;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<11;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2472+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1236+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<23;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<11;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2496+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1248+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<23;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<11;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2472+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2520+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1260+i] = conditional_negate(min, sgn,zeros); } //Process group with 9 BNs - for (int i=0;i<23;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + for (int i=0;i<11;i++) { + sgn = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2544+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1272+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<23;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + for (int i=0;i<11;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2568+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1284+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<23;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<11;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2592+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1296+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<23;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<11;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2616+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1308+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<23;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<11;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2640+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1320+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<23;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<11;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2664+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1332+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<23;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<11;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2688+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1344+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<23;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<11;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2712+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1356+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<23;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<11;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2736+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1368+i] = conditional_negate(min, sgn, zeros); } //Process group with 10 BNs - for (int i=0;i<12;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + for (int i=0;i<6;i++) { + sgn = ((__m512i*)cnProcBuf)[1386+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2760+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1380+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<12;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + for (int i=0;i<6;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2772+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1386+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<12;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<6;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2784+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1392+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<12;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<6;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2796+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1398+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<12;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<6;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2808+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1404+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<12;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<6;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2820+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1410+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<12;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<6;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2832+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1416+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<12;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<6;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2844+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1422+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<12;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<6;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2856+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1428+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<12;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<6;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2868+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1434+i] = conditional_negate(min,sgn,zeros); } //Process group with 19 BNs - for (int i=0;i<45;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + for (int i=0;i<22;i++) { + sgn = ((__m512i*)cnProcBuf)[1464+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2880+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1440+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<45;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + for (int i=0;i<22;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2928+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1464+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<45;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<22;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2976+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1488+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<45;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<22;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3024+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1512+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<45;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<22;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3072+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1536+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<45;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<22;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3120+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1560+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<45;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<22;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3168+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1584+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<45;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<22;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3216+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1608+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<45;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<22;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3264+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1632+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<45;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<22;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3312+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1656+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<45;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<22;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3360+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1680+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<45;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<22;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3408+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1704+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<45;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<22;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3456+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1728+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<45;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<22;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3504+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1752+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<45;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<22;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3552+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1776+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<45;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<22;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3600+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1800+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<45;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<22;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3648+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1824+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<45;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<22;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3696+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1848+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<45;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<22;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3744+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1872+i] = conditional_negate(min, sgn,zeros); } } diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z36_13_AVX512.c b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z36_13_AVX512.c index 25b58a5900..47a3ac7eb5 100644 --- a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z36_13_AVX512.c +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z36_13_AVX512.c @@ -1,2340 +1,2261 @@ #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; -} +#define conditional_negate(a,b,z) _mm512_mask_sub_epi8(a,_mm512_movepi8_mask(b),z,a) void nrLDPC_cnProc_BG1_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); + __m512i zmm0, min, sgn,zeros,maxLLR; + zeros = _mm512_setzero_si512(); maxLLR = _mm512_set1_epi8((char)127); - for (int i=0;i<3;i+=2) { - zmm0 = ((__m512i*)cnProcBuf)[6+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + for (int i=0;i<1;i+=2) { + sgn = ((__m512i*)cnProcBuf)[6+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[12+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[0+i] = _mm512_sign_epi16(min, sgn); - zmm0 = ((__m512i*)cnProcBuf)[7+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + ((__m512i*)cnProcBufRes)[0+i] = conditional_negate(min, sgn,zeros); + sgn = ((__m512i*)cnProcBuf)[7+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[13+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i+=2) { - zmm0 = ((__m512i*)cnProcBuf)[0+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + for (int i=0;i<1;i+=2) { + sgn = ((__m512i*)cnProcBuf)[0+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[12+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[12+i] = _mm512_sign_epi16(min, sgn); - zmm0 = ((__m512i*)cnProcBuf)[1+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + ((__m512i*)cnProcBufRes)[6+i] = conditional_negate(min, sgn,zeros); + sgn = ((__m512i*)cnProcBuf)[1+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[13+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[13+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[7+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i+=2) { - zmm0 = ((__m512i*)cnProcBuf)[0+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + for (int i=0;i<1;i+=2) { + sgn = ((__m512i*)cnProcBuf)[0+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[6+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[24+i] = _mm512_sign_epi16(min, sgn); - zmm0 = ((__m512i*)cnProcBuf)[1+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + ((__m512i*)cnProcBufRes)[12+i] = conditional_negate(min, sgn,zeros); + sgn = ((__m512i*)cnProcBuf)[1+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[7+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[25+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[13+i] = conditional_negate(min, sgn,zeros); } //Process group with 4 BNs - for (int i=0;i<7;i++) { - zmm0 = ((__m512i*)cnProcBuf)[66+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[96+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[48+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[78+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[126+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[108+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[36+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[18+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<7;i++) { - zmm0 = ((__m512i*)cnProcBuf)[36+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[96+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[18+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[78+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[126+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[108+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[96+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[48+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<7;i++) { - zmm0 = ((__m512i*)cnProcBuf)[36+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[66+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[18+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[48+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[126+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[108+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[156+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[78+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<7;i++) { - zmm0 = ((__m512i*)cnProcBuf)[36+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[66+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[18+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[48+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[96+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[78+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[216+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[108+i] = conditional_negate(min, sgn,zeros); } //Process group with 5 BNs - for (int i=0;i<22;i++) { - zmm0 = ((__m512i*)cnProcBuf)[384+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + for (int i=0;i<11;i++) { + sgn = ((__m512i*)cnProcBuf)[246+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[276+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[138+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<22;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + for (int i=0;i<11;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[492+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[246+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<22;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[384+i]; + for (int i=0;i<11;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[246+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[708+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[354+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<22;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[384+i]; + for (int i=0;i<11;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[246+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[924+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[462+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<22;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[384+i]; + for (int i=0;i<11;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[246+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1140+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[570+i] = conditional_negate(min, sgn,zeros); } //Process group with 6 BNs - for (int i=0;i<10;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + for (int i=0;i<5;i++) { + sgn = ((__m512i*)cnProcBuf)[726+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1356+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[678+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<10;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + for (int i=0;i<5;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1452+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[726+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<10;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<5;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1548+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[774+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<10;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<5;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1644+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[822+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<10;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<5;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1740+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[870+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<10;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<5;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1836+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[918+i] = conditional_negate(min, sgn,zeros); } //Process group with 7 BNs - for (int i=0;i<7;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + for (int i=0;i<3;i++) { + sgn= ((__m512i*)cnProcBuf)[996+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1932+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[966+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<7;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + for (int i=0;i<3;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1992+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[996+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<7;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<3;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2052+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1026+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<7;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<3;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2112+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1056+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<7;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<3;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2172+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1086+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<7;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<3;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2232+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1116+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<7;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<3;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2292+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1146+i] = conditional_negate(min, sgn,zeros); } //Process group with 8 BNs - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1188+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2352+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1176+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2376+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1188+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2400+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1200+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2424+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1212+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2448+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1224+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2472+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1236+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2496+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1248+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2472+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2520+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1260+i] = conditional_negate(min, sgn,zeros); } //Process group with 9 BNs - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2544+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1272+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2568+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1284+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2592+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1296+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2616+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1308+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2640+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1320+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2664+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1332+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2688+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1344+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2712+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1356+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2736+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1368+i] = conditional_negate(min, sgn, zeros); } //Process group with 10 BNs - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1386+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2760+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1380+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2772+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1386+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2784+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1392+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2796+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1398+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2808+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1404+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2820+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1410+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2832+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1416+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2844+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1422+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2856+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1428+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2868+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1434+i] = conditional_negate(min,sgn,zeros); } //Process group with 19 BNs - for (int i=0;i<6;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[1464+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2880+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1440+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<6;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2928+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1464+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<6;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2976+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1488+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<6;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3024+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1512+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<6;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3072+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1536+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<6;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3120+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1560+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<6;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3168+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1584+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<6;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3216+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1608+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<6;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3264+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1632+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<6;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3312+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1656+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<6;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3360+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1680+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<6;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3408+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1704+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<6;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3456+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1728+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<6;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3504+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1752+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<6;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3552+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1776+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<6;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3600+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1800+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<6;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3648+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1824+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<6;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3696+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1848+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<6;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3744+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1872+i] = conditional_negate(min, sgn,zeros); } } diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z384_13_AVX512.c b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z384_13_AVX512.c index 90743f4d94..e28d5adbb4 100644 --- a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z384_13_AVX512.c +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z384_13_AVX512.c @@ -1,2340 +1,2261 @@ #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; -} +#define conditional_negate(a,b,z) _mm512_mask_sub_epi8(a,_mm512_movepi8_mask(b),z,a) void nrLDPC_cnProc_BG1_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); + __m512i zmm0, min, sgn,zeros,maxLLR; + zeros = _mm512_setzero_si512(); maxLLR = _mm512_set1_epi8((char)127); - for (int i=0;i<13;i+=2) { - zmm0 = ((__m512i*)cnProcBuf)[6+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + for (int i=0;i<6;i+=2) { + sgn = ((__m512i*)cnProcBuf)[6+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[12+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[0+i] = _mm512_sign_epi16(min, sgn); - zmm0 = ((__m512i*)cnProcBuf)[7+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + ((__m512i*)cnProcBufRes)[0+i] = conditional_negate(min, sgn,zeros); + sgn = ((__m512i*)cnProcBuf)[7+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[13+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<13;i+=2) { - zmm0 = ((__m512i*)cnProcBuf)[0+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + for (int i=0;i<6;i+=2) { + sgn = ((__m512i*)cnProcBuf)[0+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[12+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[12+i] = _mm512_sign_epi16(min, sgn); - zmm0 = ((__m512i*)cnProcBuf)[1+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + ((__m512i*)cnProcBufRes)[6+i] = conditional_negate(min, sgn,zeros); + sgn = ((__m512i*)cnProcBuf)[1+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[13+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[13+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[7+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<13;i+=2) { - zmm0 = ((__m512i*)cnProcBuf)[0+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + for (int i=0;i<6;i+=2) { + sgn = ((__m512i*)cnProcBuf)[0+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[6+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[24+i] = _mm512_sign_epi16(min, sgn); - zmm0 = ((__m512i*)cnProcBuf)[1+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + ((__m512i*)cnProcBufRes)[12+i] = conditional_negate(min, sgn,zeros); + sgn = ((__m512i*)cnProcBuf)[1+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[7+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[25+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[13+i] = conditional_negate(min, sgn,zeros); } //Process group with 4 BNs - for (int i=0;i<61;i++) { - zmm0 = ((__m512i*)cnProcBuf)[66+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[96+i]; + for (int i=0;i<30;i++) { + sgn = ((__m512i*)cnProcBuf)[48+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[78+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[126+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[108+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[36+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[18+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<61;i++) { - zmm0 = ((__m512i*)cnProcBuf)[36+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[96+i]; + for (int i=0;i<30;i++) { + sgn = ((__m512i*)cnProcBuf)[18+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[78+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[126+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[108+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[96+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[48+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<61;i++) { - zmm0 = ((__m512i*)cnProcBuf)[36+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[66+i]; + for (int i=0;i<30;i++) { + sgn = ((__m512i*)cnProcBuf)[18+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[48+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[126+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[108+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[156+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[78+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<61;i++) { - zmm0 = ((__m512i*)cnProcBuf)[36+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[66+i]; + for (int i=0;i<30;i++) { + sgn = ((__m512i*)cnProcBuf)[18+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[48+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[96+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[78+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[216+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[108+i] = conditional_negate(min, sgn,zeros); } //Process group with 5 BNs - for (int i=0;i<217;i++) { - zmm0 = ((__m512i*)cnProcBuf)[384+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + for (int i=0;i<108;i++) { + sgn = ((__m512i*)cnProcBuf)[246+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[276+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[138+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<217;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + for (int i=0;i<108;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[492+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[246+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<217;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[384+i]; + for (int i=0;i<108;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[246+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[708+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[354+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<217;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[384+i]; + for (int i=0;i<108;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[246+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[924+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[462+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<217;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[384+i]; + for (int i=0;i<108;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[246+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1140+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[570+i] = conditional_negate(min, sgn,zeros); } //Process group with 6 BNs - for (int i=0;i<97;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + for (int i=0;i<48;i++) { + sgn = ((__m512i*)cnProcBuf)[726+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1356+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[678+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<97;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + for (int i=0;i<48;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1452+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[726+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<97;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<48;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1548+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[774+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<97;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<48;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1644+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[822+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<97;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<48;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1740+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[870+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<97;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<48;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1836+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[918+i] = conditional_negate(min, sgn,zeros); } //Process group with 7 BNs - for (int i=0;i<61;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + for (int i=0;i<30;i++) { + sgn= ((__m512i*)cnProcBuf)[996+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1932+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[966+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<61;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + for (int i=0;i<30;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1992+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[996+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<61;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<30;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2052+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1026+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<61;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<30;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2112+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1056+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<61;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<30;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2172+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1086+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<61;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<30;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2232+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1116+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<61;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<30;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2292+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1146+i] = conditional_negate(min, sgn,zeros); } //Process group with 8 BNs - for (int i=0;i<25;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + for (int i=0;i<12;i++) { + sgn = ((__m512i*)cnProcBuf)[1188+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2352+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1176+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<25;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + for (int i=0;i<12;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2376+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1188+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<25;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<12;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2400+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1200+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<25;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<12;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2424+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1212+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<25;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<12;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2448+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1224+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<25;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<12;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2472+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1236+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<25;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<12;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2496+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1248+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<25;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<12;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2472+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2520+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1260+i] = conditional_negate(min, sgn,zeros); } //Process group with 9 BNs - for (int i=0;i<25;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + for (int i=0;i<12;i++) { + sgn = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2544+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1272+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<25;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + for (int i=0;i<12;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2568+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1284+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<25;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<12;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2592+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1296+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<25;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<12;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2616+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1308+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<25;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<12;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2640+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1320+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<25;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<12;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2664+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1332+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<25;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<12;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2688+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1344+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<25;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<12;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2712+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1356+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<25;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<12;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2736+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1368+i] = conditional_negate(min, sgn, zeros); } //Process group with 10 BNs - for (int i=0;i<13;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + for (int i=0;i<6;i++) { + sgn = ((__m512i*)cnProcBuf)[1386+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2760+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1380+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<13;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + for (int i=0;i<6;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2772+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1386+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<13;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<6;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2784+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1392+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<13;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<6;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2796+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1398+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<13;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<6;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2808+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1404+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<13;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<6;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2820+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1410+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<13;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<6;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2832+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1416+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<13;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<6;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2844+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1422+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<13;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<6;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2856+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1428+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<13;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<6;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2868+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1434+i] = conditional_negate(min,sgn,zeros); } //Process group with 19 BNs - for (int i=0;i<49;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + for (int i=0;i<24;i++) { + sgn = ((__m512i*)cnProcBuf)[1464+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2880+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1440+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<49;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + for (int i=0;i<24;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2928+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1464+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<49;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<24;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2976+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1488+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<49;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<24;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3024+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1512+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<49;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<24;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3072+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1536+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<49;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<24;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3120+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1560+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<49;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<24;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3168+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1584+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<49;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<24;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3216+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1608+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<49;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<24;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3264+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1632+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<49;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<24;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3312+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1656+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<49;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<24;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3360+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1680+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<49;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<24;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3408+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1704+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<49;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<24;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3456+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1728+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<49;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<24;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3504+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1752+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<49;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<24;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3552+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1776+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<49;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<24;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3600+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1800+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<49;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<24;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3648+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1824+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<49;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<24;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3696+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1848+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<49;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<24;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3744+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1872+i] = conditional_negate(min, sgn,zeros); } } diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z3_13_AVX512.c b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z3_13_AVX512.c index 68d316935c..0d61a00fd6 100644 --- a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z3_13_AVX512.c +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z3_13_AVX512.c @@ -1,2340 +1,2261 @@ #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; -} +#define conditional_negate(a,b,z) _mm512_mask_sub_epi8(a,_mm512_movepi8_mask(b),z,a) void nrLDPC_cnProc_BG1_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); + __m512i zmm0, min, sgn,zeros,maxLLR; + zeros = _mm512_setzero_si512(); maxLLR = _mm512_set1_epi8((char)127); - for (int i=0;i<2;i+=2) { - zmm0 = ((__m512i*)cnProcBuf)[6+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + for (int i=0;i<1;i+=2) { + sgn = ((__m512i*)cnProcBuf)[6+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[12+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[0+i] = _mm512_sign_epi16(min, sgn); - zmm0 = ((__m512i*)cnProcBuf)[7+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + ((__m512i*)cnProcBufRes)[0+i] = conditional_negate(min, sgn,zeros); + sgn = ((__m512i*)cnProcBuf)[7+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[13+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i+=2) { - zmm0 = ((__m512i*)cnProcBuf)[0+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + for (int i=0;i<1;i+=2) { + sgn = ((__m512i*)cnProcBuf)[0+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[12+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[12+i] = _mm512_sign_epi16(min, sgn); - zmm0 = ((__m512i*)cnProcBuf)[1+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + ((__m512i*)cnProcBufRes)[6+i] = conditional_negate(min, sgn,zeros); + sgn = ((__m512i*)cnProcBuf)[1+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[13+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[13+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[7+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i+=2) { - zmm0 = ((__m512i*)cnProcBuf)[0+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + for (int i=0;i<1;i+=2) { + sgn = ((__m512i*)cnProcBuf)[0+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[6+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[24+i] = _mm512_sign_epi16(min, sgn); - zmm0 = ((__m512i*)cnProcBuf)[1+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + ((__m512i*)cnProcBufRes)[12+i] = conditional_negate(min, sgn,zeros); + sgn = ((__m512i*)cnProcBuf)[1+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[7+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[25+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[13+i] = conditional_negate(min, sgn,zeros); } //Process group with 4 BNs - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[66+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[96+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[48+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[78+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[126+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[108+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[36+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[18+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[36+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[96+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[18+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[78+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[126+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[108+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[96+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[48+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[36+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[66+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[18+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[48+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[126+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[108+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[156+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[78+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[36+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[66+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[18+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[48+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[96+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[78+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[216+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[108+i] = conditional_negate(min, sgn,zeros); } //Process group with 5 BNs - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[384+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[246+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[276+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[138+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[492+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[246+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[384+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[246+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[708+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[354+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[384+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[246+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[924+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[462+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[384+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[246+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1140+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[570+i] = conditional_negate(min, sgn,zeros); } //Process group with 6 BNs - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[726+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1356+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[678+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1452+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[726+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1548+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[774+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1644+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[822+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1740+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[870+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1836+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[918+i] = conditional_negate(min, sgn,zeros); } //Process group with 7 BNs - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + for (int i=0;i<1;i++) { + sgn= ((__m512i*)cnProcBuf)[996+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1932+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[966+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + for (int i=0;i<1;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1992+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[996+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<1;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2052+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1026+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<1;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2112+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1056+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<1;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2172+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1086+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<1;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2232+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1116+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<1;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2292+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1146+i] = conditional_negate(min, sgn,zeros); } //Process group with 8 BNs - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1188+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2352+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1176+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2376+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1188+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2400+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1200+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2424+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1212+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2448+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1224+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2472+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1236+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2496+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1248+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2472+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2520+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1260+i] = conditional_negate(min, sgn,zeros); } //Process group with 9 BNs - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2544+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1272+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2568+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1284+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2592+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1296+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2616+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1308+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2640+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1320+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2664+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1332+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2688+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1344+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2712+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1356+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2736+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1368+i] = conditional_negate(min, sgn, zeros); } //Process group with 10 BNs - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1386+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2760+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1380+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2772+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1386+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2784+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1392+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2796+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1398+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2808+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1404+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2820+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1410+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2832+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1416+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2844+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1422+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2856+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1428+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2868+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1434+i] = conditional_negate(min,sgn,zeros); } //Process group with 19 BNs - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1464+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2880+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1440+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2928+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1464+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2976+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1488+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3024+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1512+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3072+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1536+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3120+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1560+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3168+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1584+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3216+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1608+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3264+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1632+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3312+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1656+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3360+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1680+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3408+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1704+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3456+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1728+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3504+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1752+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3552+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1776+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3600+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1800+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3648+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1824+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3696+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1848+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3744+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1872+i] = conditional_negate(min, sgn,zeros); } } diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z40_13_AVX512.c b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z40_13_AVX512.c index 39bd657832..8d64735af7 100644 --- a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z40_13_AVX512.c +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z40_13_AVX512.c @@ -1,2340 +1,2261 @@ #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; -} +#define conditional_negate(a,b,z) _mm512_mask_sub_epi8(a,_mm512_movepi8_mask(b),z,a) void nrLDPC_cnProc_BG1_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); + __m512i zmm0, min, sgn,zeros,maxLLR; + zeros = _mm512_setzero_si512(); maxLLR = _mm512_set1_epi8((char)127); - for (int i=0;i<3;i+=2) { - zmm0 = ((__m512i*)cnProcBuf)[6+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + for (int i=0;i<1;i+=2) { + sgn = ((__m512i*)cnProcBuf)[6+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[12+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[0+i] = _mm512_sign_epi16(min, sgn); - zmm0 = ((__m512i*)cnProcBuf)[7+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + ((__m512i*)cnProcBufRes)[0+i] = conditional_negate(min, sgn,zeros); + sgn = ((__m512i*)cnProcBuf)[7+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[13+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i+=2) { - zmm0 = ((__m512i*)cnProcBuf)[0+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + for (int i=0;i<1;i+=2) { + sgn = ((__m512i*)cnProcBuf)[0+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[12+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[12+i] = _mm512_sign_epi16(min, sgn); - zmm0 = ((__m512i*)cnProcBuf)[1+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + ((__m512i*)cnProcBufRes)[6+i] = conditional_negate(min, sgn,zeros); + sgn = ((__m512i*)cnProcBuf)[1+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[13+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[13+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[7+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i+=2) { - zmm0 = ((__m512i*)cnProcBuf)[0+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + for (int i=0;i<1;i+=2) { + sgn = ((__m512i*)cnProcBuf)[0+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[6+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[24+i] = _mm512_sign_epi16(min, sgn); - zmm0 = ((__m512i*)cnProcBuf)[1+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + ((__m512i*)cnProcBufRes)[12+i] = conditional_negate(min, sgn,zeros); + sgn = ((__m512i*)cnProcBuf)[1+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[7+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[25+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[13+i] = conditional_negate(min, sgn,zeros); } //Process group with 4 BNs - for (int i=0;i<8;i++) { - zmm0 = ((__m512i*)cnProcBuf)[66+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[96+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[48+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[78+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[126+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[108+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[36+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[18+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<8;i++) { - zmm0 = ((__m512i*)cnProcBuf)[36+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[96+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[18+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[78+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[126+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[108+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[96+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[48+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<8;i++) { - zmm0 = ((__m512i*)cnProcBuf)[36+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[66+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[18+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[48+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[126+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[108+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[156+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[78+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<8;i++) { - zmm0 = ((__m512i*)cnProcBuf)[36+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[66+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[18+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[48+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[96+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[78+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[216+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[108+i] = conditional_negate(min, sgn,zeros); } //Process group with 5 BNs - for (int i=0;i<24;i++) { - zmm0 = ((__m512i*)cnProcBuf)[384+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + for (int i=0;i<12;i++) { + sgn = ((__m512i*)cnProcBuf)[246+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[276+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[138+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<24;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + for (int i=0;i<12;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[492+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[246+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<24;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[384+i]; + for (int i=0;i<12;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[246+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[708+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[354+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<24;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[384+i]; + for (int i=0;i<12;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[246+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[924+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[462+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<24;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[384+i]; + for (int i=0;i<12;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[246+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1140+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[570+i] = conditional_negate(min, sgn,zeros); } //Process group with 6 BNs - for (int i=0;i<11;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + for (int i=0;i<5;i++) { + sgn = ((__m512i*)cnProcBuf)[726+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1356+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[678+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<11;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + for (int i=0;i<5;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1452+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[726+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<11;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<5;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1548+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[774+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<11;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<5;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1644+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[822+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<11;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<5;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1740+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[870+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<11;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<5;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1836+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[918+i] = conditional_negate(min, sgn,zeros); } //Process group with 7 BNs - for (int i=0;i<8;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + for (int i=0;i<4;i++) { + sgn= ((__m512i*)cnProcBuf)[996+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1932+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[966+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<8;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + for (int i=0;i<4;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1992+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[996+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<8;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<4;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2052+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1026+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<8;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<4;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2112+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1056+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<8;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<4;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2172+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1086+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<8;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<4;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2232+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1116+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<8;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<4;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2292+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1146+i] = conditional_negate(min, sgn,zeros); } //Process group with 8 BNs - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1188+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2352+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1176+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2376+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1188+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2400+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1200+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2424+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1212+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2448+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1224+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2472+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1236+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2496+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1248+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2472+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2520+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1260+i] = conditional_negate(min, sgn,zeros); } //Process group with 9 BNs - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2544+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1272+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2568+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1284+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2592+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1296+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2616+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1308+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2640+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1320+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2664+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1332+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2688+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1344+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2712+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1356+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2736+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1368+i] = conditional_negate(min, sgn, zeros); } //Process group with 10 BNs - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1386+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2760+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1380+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2772+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1386+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2784+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1392+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2796+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1398+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2808+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1404+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2820+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1410+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2832+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1416+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2844+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1422+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2856+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1428+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2868+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1434+i] = conditional_negate(min,sgn,zeros); } //Process group with 19 BNs - for (int i=0;i<6;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[1464+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2880+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1440+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<6;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2928+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1464+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<6;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2976+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1488+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<6;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3024+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1512+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<6;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3072+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1536+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<6;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3120+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1560+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<6;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3168+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1584+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<6;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3216+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1608+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<6;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3264+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1632+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<6;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3312+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1656+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<6;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3360+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1680+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<6;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3408+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1704+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<6;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3456+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1728+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<6;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3504+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1752+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<6;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3552+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1776+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<6;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3600+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1800+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<6;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3648+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1824+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<6;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3696+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1848+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<6;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3744+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1872+i] = conditional_negate(min, sgn,zeros); } } diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z44_13_AVX512.c b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z44_13_AVX512.c index aa1e643497..9b7179e26c 100644 --- a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z44_13_AVX512.c +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z44_13_AVX512.c @@ -1,2340 +1,2261 @@ #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; -} +#define conditional_negate(a,b,z) _mm512_mask_sub_epi8(a,_mm512_movepi8_mask(b),z,a) void nrLDPC_cnProc_BG1_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); + __m512i zmm0, min, sgn,zeros,maxLLR; + zeros = _mm512_setzero_si512(); maxLLR = _mm512_set1_epi8((char)127); - for (int i=0;i<3;i+=2) { - zmm0 = ((__m512i*)cnProcBuf)[6+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + for (int i=0;i<1;i+=2) { + sgn = ((__m512i*)cnProcBuf)[6+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[12+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[0+i] = _mm512_sign_epi16(min, sgn); - zmm0 = ((__m512i*)cnProcBuf)[7+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + ((__m512i*)cnProcBufRes)[0+i] = conditional_negate(min, sgn,zeros); + sgn = ((__m512i*)cnProcBuf)[7+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[13+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i+=2) { - zmm0 = ((__m512i*)cnProcBuf)[0+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + for (int i=0;i<1;i+=2) { + sgn = ((__m512i*)cnProcBuf)[0+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[12+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[12+i] = _mm512_sign_epi16(min, sgn); - zmm0 = ((__m512i*)cnProcBuf)[1+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + ((__m512i*)cnProcBufRes)[6+i] = conditional_negate(min, sgn,zeros); + sgn = ((__m512i*)cnProcBuf)[1+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[13+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[13+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[7+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i+=2) { - zmm0 = ((__m512i*)cnProcBuf)[0+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + for (int i=0;i<1;i+=2) { + sgn = ((__m512i*)cnProcBuf)[0+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[6+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[24+i] = _mm512_sign_epi16(min, sgn); - zmm0 = ((__m512i*)cnProcBuf)[1+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + ((__m512i*)cnProcBufRes)[12+i] = conditional_negate(min, sgn,zeros); + sgn = ((__m512i*)cnProcBuf)[1+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[7+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[25+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[13+i] = conditional_negate(min, sgn,zeros); } //Process group with 4 BNs - for (int i=0;i<8;i++) { - zmm0 = ((__m512i*)cnProcBuf)[66+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[96+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[48+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[78+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[126+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[108+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[36+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[18+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<8;i++) { - zmm0 = ((__m512i*)cnProcBuf)[36+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[96+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[18+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[78+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[126+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[108+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[96+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[48+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<8;i++) { - zmm0 = ((__m512i*)cnProcBuf)[36+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[66+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[18+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[48+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[126+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[108+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[156+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[78+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<8;i++) { - zmm0 = ((__m512i*)cnProcBuf)[36+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[66+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[18+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[48+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[96+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[78+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[216+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[108+i] = conditional_negate(min, sgn,zeros); } //Process group with 5 BNs - for (int i=0;i<26;i++) { - zmm0 = ((__m512i*)cnProcBuf)[384+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + for (int i=0;i<13;i++) { + sgn = ((__m512i*)cnProcBuf)[246+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[276+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[138+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<26;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + for (int i=0;i<13;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[492+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[246+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<26;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[384+i]; + for (int i=0;i<13;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[246+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[708+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[354+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<26;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[384+i]; + for (int i=0;i<13;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[246+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[924+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[462+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<26;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[384+i]; + for (int i=0;i<13;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[246+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1140+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[570+i] = conditional_negate(min, sgn,zeros); } //Process group with 6 BNs - for (int i=0;i<12;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + for (int i=0;i<6;i++) { + sgn = ((__m512i*)cnProcBuf)[726+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1356+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[678+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<12;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + for (int i=0;i<6;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1452+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[726+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<12;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<6;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1548+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[774+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<12;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<6;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1644+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[822+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<12;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<6;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1740+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[870+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<12;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<6;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1836+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[918+i] = conditional_negate(min, sgn,zeros); } //Process group with 7 BNs - for (int i=0;i<8;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + for (int i=0;i<4;i++) { + sgn= ((__m512i*)cnProcBuf)[996+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1932+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[966+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<8;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + for (int i=0;i<4;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1992+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[996+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<8;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<4;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2052+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1026+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<8;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<4;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2112+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1056+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<8;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<4;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2172+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1086+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<8;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<4;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2232+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1116+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<8;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<4;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2292+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1146+i] = conditional_negate(min, sgn,zeros); } //Process group with 8 BNs - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1188+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2352+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1176+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2376+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1188+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2400+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1200+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2424+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1212+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2448+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1224+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2472+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1236+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2496+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1248+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2472+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2520+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1260+i] = conditional_negate(min, sgn,zeros); } //Process group with 9 BNs - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2544+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1272+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2568+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1284+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2592+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1296+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2616+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1308+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2640+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1320+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2664+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1332+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2688+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1344+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2712+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1356+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2736+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1368+i] = conditional_negate(min, sgn, zeros); } //Process group with 10 BNs - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1386+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2760+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1380+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2772+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1386+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2784+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1392+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2796+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1398+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2808+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1404+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2820+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1410+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2832+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1416+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2844+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1422+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2856+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1428+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2868+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1434+i] = conditional_negate(min,sgn,zeros); } //Process group with 19 BNs - for (int i=0;i<7;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[1464+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2880+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1440+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<7;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2928+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1464+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<7;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2976+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1488+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<7;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3024+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1512+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<7;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3072+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1536+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<7;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3120+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1560+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<7;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3168+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1584+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<7;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3216+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1608+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<7;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3264+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1632+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<7;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3312+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1656+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<7;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3360+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1680+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<7;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3408+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1704+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<7;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3456+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1728+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<7;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3504+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1752+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<7;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3552+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1776+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<7;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3600+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1800+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<7;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3648+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1824+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<7;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3696+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1848+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<7;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3744+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1872+i] = conditional_negate(min, sgn,zeros); } } diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z48_13_AVX512.c b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z48_13_AVX512.c index 5638fe34d4..d3483cc5db 100644 --- a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z48_13_AVX512.c +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z48_13_AVX512.c @@ -1,2340 +1,2261 @@ #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; -} +#define conditional_negate(a,b,z) _mm512_mask_sub_epi8(a,_mm512_movepi8_mask(b),z,a) void nrLDPC_cnProc_BG1_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); + __m512i zmm0, min, sgn,zeros,maxLLR; + zeros = _mm512_setzero_si512(); maxLLR = _mm512_set1_epi8((char)127); - for (int i=0;i<3;i+=2) { - zmm0 = ((__m512i*)cnProcBuf)[6+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + for (int i=0;i<1;i+=2) { + sgn = ((__m512i*)cnProcBuf)[6+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[12+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[0+i] = _mm512_sign_epi16(min, sgn); - zmm0 = ((__m512i*)cnProcBuf)[7+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + ((__m512i*)cnProcBufRes)[0+i] = conditional_negate(min, sgn,zeros); + sgn = ((__m512i*)cnProcBuf)[7+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[13+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i+=2) { - zmm0 = ((__m512i*)cnProcBuf)[0+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + for (int i=0;i<1;i+=2) { + sgn = ((__m512i*)cnProcBuf)[0+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[12+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[12+i] = _mm512_sign_epi16(min, sgn); - zmm0 = ((__m512i*)cnProcBuf)[1+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + ((__m512i*)cnProcBufRes)[6+i] = conditional_negate(min, sgn,zeros); + sgn = ((__m512i*)cnProcBuf)[1+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[13+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[13+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[7+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i+=2) { - zmm0 = ((__m512i*)cnProcBuf)[0+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + for (int i=0;i<1;i+=2) { + sgn = ((__m512i*)cnProcBuf)[0+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[6+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[24+i] = _mm512_sign_epi16(min, sgn); - zmm0 = ((__m512i*)cnProcBuf)[1+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + ((__m512i*)cnProcBufRes)[12+i] = conditional_negate(min, sgn,zeros); + sgn = ((__m512i*)cnProcBuf)[1+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[7+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[25+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[13+i] = conditional_negate(min, sgn,zeros); } //Process group with 4 BNs - for (int i=0;i<9;i++) { - zmm0 = ((__m512i*)cnProcBuf)[66+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[96+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[48+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[78+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[126+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[108+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[36+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[18+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<9;i++) { - zmm0 = ((__m512i*)cnProcBuf)[36+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[96+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[18+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[78+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[126+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[108+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[96+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[48+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<9;i++) { - zmm0 = ((__m512i*)cnProcBuf)[36+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[66+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[18+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[48+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[126+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[108+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[156+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[78+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<9;i++) { - zmm0 = ((__m512i*)cnProcBuf)[36+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[66+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[18+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[48+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[96+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[78+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[216+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[108+i] = conditional_negate(min, sgn,zeros); } //Process group with 5 BNs - for (int i=0;i<28;i++) { - zmm0 = ((__m512i*)cnProcBuf)[384+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + for (int i=0;i<14;i++) { + sgn = ((__m512i*)cnProcBuf)[246+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[276+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[138+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<28;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + for (int i=0;i<14;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[492+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[246+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<28;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[384+i]; + for (int i=0;i<14;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[246+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[708+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[354+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<28;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[384+i]; + for (int i=0;i<14;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[246+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[924+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[462+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<28;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[384+i]; + for (int i=0;i<14;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[246+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1140+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[570+i] = conditional_negate(min, sgn,zeros); } //Process group with 6 BNs - for (int i=0;i<13;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + for (int i=0;i<6;i++) { + sgn = ((__m512i*)cnProcBuf)[726+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1356+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[678+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<13;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + for (int i=0;i<6;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1452+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[726+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<13;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<6;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1548+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[774+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<13;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<6;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1644+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[822+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<13;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<6;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1740+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[870+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<13;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<6;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1836+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[918+i] = conditional_negate(min, sgn,zeros); } //Process group with 7 BNs - for (int i=0;i<9;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + for (int i=0;i<4;i++) { + sgn= ((__m512i*)cnProcBuf)[996+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1932+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[966+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<9;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + for (int i=0;i<4;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1992+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[996+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<9;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<4;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2052+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1026+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<9;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<4;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2112+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1056+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<9;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<4;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2172+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1086+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<9;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<4;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2232+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1116+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<9;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<4;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2292+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1146+i] = conditional_negate(min, sgn,zeros); } //Process group with 8 BNs - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1188+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2352+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1176+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2376+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1188+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2400+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1200+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2424+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1212+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2448+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1224+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2472+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1236+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2496+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1248+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2472+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2520+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1260+i] = conditional_negate(min, sgn,zeros); } //Process group with 9 BNs - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2544+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1272+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2568+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1284+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2592+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1296+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2616+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1308+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2640+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1320+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2664+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1332+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2688+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1344+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2712+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1356+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2736+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1368+i] = conditional_negate(min, sgn, zeros); } //Process group with 10 BNs - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1386+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2760+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1380+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2772+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1386+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2784+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1392+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2796+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1398+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2808+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1404+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2820+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1410+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2832+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1416+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2844+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1422+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2856+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1428+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2868+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1434+i] = conditional_negate(min,sgn,zeros); } //Process group with 19 BNs - for (int i=0;i<7;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[1464+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2880+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1440+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<7;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2928+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1464+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<7;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2976+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1488+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<7;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3024+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1512+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<7;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3072+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1536+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<7;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3120+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1560+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<7;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3168+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1584+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<7;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3216+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1608+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<7;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3264+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1632+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<7;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3312+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1656+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<7;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3360+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1680+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<7;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3408+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1704+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<7;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3456+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1728+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<7;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3504+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1752+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<7;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3552+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1776+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<7;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3600+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1800+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<7;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3648+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1824+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<7;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3696+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1848+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<7;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3744+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1872+i] = conditional_negate(min, sgn,zeros); } } diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z4_13_AVX512.c b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z4_13_AVX512.c index 268c1feda5..e3a32db495 100644 --- a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z4_13_AVX512.c +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z4_13_AVX512.c @@ -1,2340 +1,2261 @@ #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; -} +#define conditional_negate(a,b,z) _mm512_mask_sub_epi8(a,_mm512_movepi8_mask(b),z,a) void nrLDPC_cnProc_BG1_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); + __m512i zmm0, min, sgn,zeros,maxLLR; + zeros = _mm512_setzero_si512(); maxLLR = _mm512_set1_epi8((char)127); - for (int i=0;i<2;i+=2) { - zmm0 = ((__m512i*)cnProcBuf)[6+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + for (int i=0;i<1;i+=2) { + sgn = ((__m512i*)cnProcBuf)[6+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[12+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[0+i] = _mm512_sign_epi16(min, sgn); - zmm0 = ((__m512i*)cnProcBuf)[7+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + ((__m512i*)cnProcBufRes)[0+i] = conditional_negate(min, sgn,zeros); + sgn = ((__m512i*)cnProcBuf)[7+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[13+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i+=2) { - zmm0 = ((__m512i*)cnProcBuf)[0+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + for (int i=0;i<1;i+=2) { + sgn = ((__m512i*)cnProcBuf)[0+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[12+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[12+i] = _mm512_sign_epi16(min, sgn); - zmm0 = ((__m512i*)cnProcBuf)[1+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + ((__m512i*)cnProcBufRes)[6+i] = conditional_negate(min, sgn,zeros); + sgn = ((__m512i*)cnProcBuf)[1+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[13+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[13+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[7+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i+=2) { - zmm0 = ((__m512i*)cnProcBuf)[0+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + for (int i=0;i<1;i+=2) { + sgn = ((__m512i*)cnProcBuf)[0+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[6+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[24+i] = _mm512_sign_epi16(min, sgn); - zmm0 = ((__m512i*)cnProcBuf)[1+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + ((__m512i*)cnProcBufRes)[12+i] = conditional_negate(min, sgn,zeros); + sgn = ((__m512i*)cnProcBuf)[1+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[7+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[25+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[13+i] = conditional_negate(min, sgn,zeros); } //Process group with 4 BNs - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[66+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[96+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[48+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[78+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[126+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[108+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[36+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[18+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[36+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[96+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[18+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[78+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[126+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[108+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[96+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[48+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[36+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[66+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[18+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[48+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[126+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[108+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[156+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[78+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[36+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[66+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[18+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[48+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[96+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[78+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[216+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[108+i] = conditional_negate(min, sgn,zeros); } //Process group with 5 BNs - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[384+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[246+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[276+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[138+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[492+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[246+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[384+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[246+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[708+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[354+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[384+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[246+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[924+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[462+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[384+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[246+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1140+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[570+i] = conditional_negate(min, sgn,zeros); } //Process group with 6 BNs - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[726+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1356+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[678+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1452+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[726+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1548+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[774+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1644+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[822+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1740+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[870+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1836+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[918+i] = conditional_negate(min, sgn,zeros); } //Process group with 7 BNs - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + for (int i=0;i<1;i++) { + sgn= ((__m512i*)cnProcBuf)[996+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1932+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[966+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + for (int i=0;i<1;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1992+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[996+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<1;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2052+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1026+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<1;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2112+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1056+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<1;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2172+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1086+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<1;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2232+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1116+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<1;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2292+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1146+i] = conditional_negate(min, sgn,zeros); } //Process group with 8 BNs - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1188+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2352+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1176+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2376+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1188+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2400+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1200+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2424+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1212+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2448+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1224+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2472+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1236+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2496+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1248+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2472+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2520+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1260+i] = conditional_negate(min, sgn,zeros); } //Process group with 9 BNs - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2544+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1272+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2568+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1284+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2592+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1296+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2616+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1308+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2640+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1320+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2664+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1332+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2688+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1344+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2712+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1356+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2736+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1368+i] = conditional_negate(min, sgn, zeros); } //Process group with 10 BNs - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1386+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2760+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1380+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2772+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1386+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2784+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1392+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2796+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1398+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2808+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1404+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2820+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1410+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2832+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1416+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2844+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1422+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2856+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1428+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2868+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1434+i] = conditional_negate(min,sgn,zeros); } //Process group with 19 BNs - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1464+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2880+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1440+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2928+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1464+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2976+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1488+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3024+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1512+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3072+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1536+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3120+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1560+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3168+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1584+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3216+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1608+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3264+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1632+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3312+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1656+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3360+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1680+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3408+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1704+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3456+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1728+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3504+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1752+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3552+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1776+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3600+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1800+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3648+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1824+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3696+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1848+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3744+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1872+i] = conditional_negate(min, sgn,zeros); } } diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z52_13_AVX512.c b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z52_13_AVX512.c index bbb23c68e1..e23a9003fc 100644 --- a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z52_13_AVX512.c +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z52_13_AVX512.c @@ -1,2340 +1,2261 @@ #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; -} +#define conditional_negate(a,b,z) _mm512_mask_sub_epi8(a,_mm512_movepi8_mask(b),z,a) void nrLDPC_cnProc_BG1_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); + __m512i zmm0, min, sgn,zeros,maxLLR; + zeros = _mm512_setzero_si512(); maxLLR = _mm512_set1_epi8((char)127); - for (int i=0;i<3;i+=2) { - zmm0 = ((__m512i*)cnProcBuf)[6+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + for (int i=0;i<1;i+=2) { + sgn = ((__m512i*)cnProcBuf)[6+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[12+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[0+i] = _mm512_sign_epi16(min, sgn); - zmm0 = ((__m512i*)cnProcBuf)[7+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + ((__m512i*)cnProcBufRes)[0+i] = conditional_negate(min, sgn,zeros); + sgn = ((__m512i*)cnProcBuf)[7+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[13+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i+=2) { - zmm0 = ((__m512i*)cnProcBuf)[0+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + for (int i=0;i<1;i+=2) { + sgn = ((__m512i*)cnProcBuf)[0+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[12+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[12+i] = _mm512_sign_epi16(min, sgn); - zmm0 = ((__m512i*)cnProcBuf)[1+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + ((__m512i*)cnProcBufRes)[6+i] = conditional_negate(min, sgn,zeros); + sgn = ((__m512i*)cnProcBuf)[1+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[13+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[13+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[7+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i+=2) { - zmm0 = ((__m512i*)cnProcBuf)[0+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + for (int i=0;i<1;i+=2) { + sgn = ((__m512i*)cnProcBuf)[0+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[6+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[24+i] = _mm512_sign_epi16(min, sgn); - zmm0 = ((__m512i*)cnProcBuf)[1+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + ((__m512i*)cnProcBufRes)[12+i] = conditional_negate(min, sgn,zeros); + sgn = ((__m512i*)cnProcBuf)[1+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[7+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[25+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[13+i] = conditional_negate(min, sgn,zeros); } //Process group with 4 BNs - for (int i=0;i<10;i++) { - zmm0 = ((__m512i*)cnProcBuf)[66+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[96+i]; + for (int i=0;i<5;i++) { + sgn = ((__m512i*)cnProcBuf)[48+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[78+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[126+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[108+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[36+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[18+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<10;i++) { - zmm0 = ((__m512i*)cnProcBuf)[36+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[96+i]; + for (int i=0;i<5;i++) { + sgn = ((__m512i*)cnProcBuf)[18+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[78+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[126+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[108+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[96+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[48+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<10;i++) { - zmm0 = ((__m512i*)cnProcBuf)[36+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[66+i]; + for (int i=0;i<5;i++) { + sgn = ((__m512i*)cnProcBuf)[18+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[48+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[126+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[108+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[156+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[78+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<10;i++) { - zmm0 = ((__m512i*)cnProcBuf)[36+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[66+i]; + for (int i=0;i<5;i++) { + sgn = ((__m512i*)cnProcBuf)[18+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[48+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[96+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[78+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[216+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[108+i] = conditional_negate(min, sgn,zeros); } //Process group with 5 BNs - for (int i=0;i<31;i++) { - zmm0 = ((__m512i*)cnProcBuf)[384+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + for (int i=0;i<15;i++) { + sgn = ((__m512i*)cnProcBuf)[246+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[276+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[138+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<31;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + for (int i=0;i<15;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[492+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[246+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<31;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[384+i]; + for (int i=0;i<15;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[246+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[708+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[354+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<31;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[384+i]; + for (int i=0;i<15;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[246+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[924+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[462+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<31;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[384+i]; + for (int i=0;i<15;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[246+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1140+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[570+i] = conditional_negate(min, sgn,zeros); } //Process group with 6 BNs - for (int i=0;i<14;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + for (int i=0;i<7;i++) { + sgn = ((__m512i*)cnProcBuf)[726+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1356+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[678+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<14;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + for (int i=0;i<7;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1452+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[726+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<14;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<7;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1548+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[774+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<14;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<7;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1644+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[822+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<14;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<7;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1740+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[870+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<14;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<7;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1836+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[918+i] = conditional_negate(min, sgn,zeros); } //Process group with 7 BNs - for (int i=0;i<10;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + for (int i=0;i<5;i++) { + sgn= ((__m512i*)cnProcBuf)[996+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1932+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[966+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<10;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + for (int i=0;i<5;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1992+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[996+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<10;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<5;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2052+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1026+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<10;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<5;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2112+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1056+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<10;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<5;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2172+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1086+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<10;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<5;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2232+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1116+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<10;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<5;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2292+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1146+i] = conditional_negate(min, sgn,zeros); } //Process group with 8 BNs - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1188+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2352+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1176+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2376+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1188+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2400+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1200+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2424+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1212+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2448+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1224+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2472+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1236+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2496+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1248+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2472+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2520+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1260+i] = conditional_negate(min, sgn,zeros); } //Process group with 9 BNs - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2544+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1272+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2568+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1284+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2592+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1296+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2616+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1308+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2640+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1320+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2664+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1332+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2688+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1344+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2712+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1356+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2736+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1368+i] = conditional_negate(min, sgn, zeros); } //Process group with 10 BNs - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1386+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2760+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1380+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2772+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1386+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2784+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1392+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2796+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1398+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2808+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1404+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2820+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1410+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2832+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1416+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2844+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1422+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2856+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1428+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2868+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1434+i] = conditional_negate(min,sgn,zeros); } //Process group with 19 BNs - for (int i=0;i<8;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[1464+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2880+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1440+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<8;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2928+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1464+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<8;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2976+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1488+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<8;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3024+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1512+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<8;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3072+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1536+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<8;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3120+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1560+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<8;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3168+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1584+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<8;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3216+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1608+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<8;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3264+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1632+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<8;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3312+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1656+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<8;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3360+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1680+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<8;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3408+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1704+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<8;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3456+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1728+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<8;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3504+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1752+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<8;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3552+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1776+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<8;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3600+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1800+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<8;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3648+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1824+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<8;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3696+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1848+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<8;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3744+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1872+i] = conditional_negate(min, sgn,zeros); } } diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z56_13_AVX512.c b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z56_13_AVX512.c index 697578fb91..72d3b15771 100644 --- a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z56_13_AVX512.c +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z56_13_AVX512.c @@ -1,2340 +1,2261 @@ #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; -} +#define conditional_negate(a,b,z) _mm512_mask_sub_epi8(a,_mm512_movepi8_mask(b),z,a) void nrLDPC_cnProc_BG1_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); + __m512i zmm0, min, sgn,zeros,maxLLR; + zeros = _mm512_setzero_si512(); maxLLR = _mm512_set1_epi8((char)127); - for (int i=0;i<3;i+=2) { - zmm0 = ((__m512i*)cnProcBuf)[6+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + for (int i=0;i<1;i+=2) { + sgn = ((__m512i*)cnProcBuf)[6+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[12+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[0+i] = _mm512_sign_epi16(min, sgn); - zmm0 = ((__m512i*)cnProcBuf)[7+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + ((__m512i*)cnProcBufRes)[0+i] = conditional_negate(min, sgn,zeros); + sgn = ((__m512i*)cnProcBuf)[7+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[13+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i+=2) { - zmm0 = ((__m512i*)cnProcBuf)[0+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + for (int i=0;i<1;i+=2) { + sgn = ((__m512i*)cnProcBuf)[0+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[12+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[12+i] = _mm512_sign_epi16(min, sgn); - zmm0 = ((__m512i*)cnProcBuf)[1+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + ((__m512i*)cnProcBufRes)[6+i] = conditional_negate(min, sgn,zeros); + sgn = ((__m512i*)cnProcBuf)[1+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[13+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[13+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[7+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i+=2) { - zmm0 = ((__m512i*)cnProcBuf)[0+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + for (int i=0;i<1;i+=2) { + sgn = ((__m512i*)cnProcBuf)[0+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[6+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[24+i] = _mm512_sign_epi16(min, sgn); - zmm0 = ((__m512i*)cnProcBuf)[1+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + ((__m512i*)cnProcBufRes)[12+i] = conditional_negate(min, sgn,zeros); + sgn = ((__m512i*)cnProcBuf)[1+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[7+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[25+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[13+i] = conditional_negate(min, sgn,zeros); } //Process group with 4 BNs - for (int i=0;i<10;i++) { - zmm0 = ((__m512i*)cnProcBuf)[66+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[96+i]; + for (int i=0;i<5;i++) { + sgn = ((__m512i*)cnProcBuf)[48+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[78+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[126+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[108+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[36+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[18+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<10;i++) { - zmm0 = ((__m512i*)cnProcBuf)[36+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[96+i]; + for (int i=0;i<5;i++) { + sgn = ((__m512i*)cnProcBuf)[18+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[78+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[126+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[108+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[96+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[48+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<10;i++) { - zmm0 = ((__m512i*)cnProcBuf)[36+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[66+i]; + for (int i=0;i<5;i++) { + sgn = ((__m512i*)cnProcBuf)[18+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[48+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[126+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[108+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[156+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[78+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<10;i++) { - zmm0 = ((__m512i*)cnProcBuf)[36+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[66+i]; + for (int i=0;i<5;i++) { + sgn = ((__m512i*)cnProcBuf)[18+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[48+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[96+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[78+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[216+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[108+i] = conditional_negate(min, sgn,zeros); } //Process group with 5 BNs - for (int i=0;i<33;i++) { - zmm0 = ((__m512i*)cnProcBuf)[384+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + for (int i=0;i<16;i++) { + sgn = ((__m512i*)cnProcBuf)[246+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[276+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[138+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<33;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + for (int i=0;i<16;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[492+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[246+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<33;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[384+i]; + for (int i=0;i<16;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[246+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[708+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[354+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<33;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[384+i]; + for (int i=0;i<16;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[246+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[924+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[462+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<33;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[384+i]; + for (int i=0;i<16;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[246+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1140+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[570+i] = conditional_negate(min, sgn,zeros); } //Process group with 6 BNs - for (int i=0;i<15;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + for (int i=0;i<7;i++) { + sgn = ((__m512i*)cnProcBuf)[726+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1356+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[678+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<15;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + for (int i=0;i<7;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1452+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[726+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<15;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<7;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1548+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[774+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<15;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<7;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1644+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[822+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<15;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<7;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1740+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[870+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<15;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<7;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1836+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[918+i] = conditional_negate(min, sgn,zeros); } //Process group with 7 BNs - for (int i=0;i<10;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + for (int i=0;i<5;i++) { + sgn= ((__m512i*)cnProcBuf)[996+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1932+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[966+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<10;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + for (int i=0;i<5;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1992+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[996+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<10;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<5;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2052+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1026+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<10;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<5;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2112+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1056+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<10;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<5;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2172+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1086+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<10;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<5;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2232+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1116+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<10;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<5;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2292+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1146+i] = conditional_negate(min, sgn,zeros); } //Process group with 8 BNs - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1188+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2352+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1176+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2376+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1188+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2400+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1200+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2424+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1212+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2448+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1224+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2472+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1236+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2496+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1248+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2472+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2520+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1260+i] = conditional_negate(min, sgn,zeros); } //Process group with 9 BNs - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2544+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1272+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2568+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1284+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2592+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1296+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2616+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1308+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2640+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1320+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2664+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1332+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2688+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1344+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2712+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1356+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2736+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1368+i] = conditional_negate(min, sgn, zeros); } //Process group with 10 BNs - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1386+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2760+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1380+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2772+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1386+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2784+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1392+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2796+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1398+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2808+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1404+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2820+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1410+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2832+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1416+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2844+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1422+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2856+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1428+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2868+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1434+i] = conditional_negate(min,sgn,zeros); } //Process group with 19 BNs - for (int i=0;i<8;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[1464+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2880+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1440+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<8;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2928+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1464+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<8;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2976+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1488+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<8;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3024+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1512+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<8;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3072+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1536+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<8;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3120+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1560+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<8;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3168+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1584+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<8;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3216+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1608+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<8;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3264+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1632+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<8;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3312+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1656+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<8;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3360+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1680+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<8;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3408+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1704+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<8;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3456+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1728+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<8;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3504+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1752+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<8;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3552+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1776+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<8;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3600+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1800+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<8;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3648+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1824+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<8;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3696+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1848+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<8;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3744+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1872+i] = conditional_negate(min, sgn,zeros); } } diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z5_13_AVX512.c b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z5_13_AVX512.c index 9ecfe8253e..2e5adf5f34 100644 --- a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z5_13_AVX512.c +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z5_13_AVX512.c @@ -1,2340 +1,2261 @@ #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; -} +#define conditional_negate(a,b,z) _mm512_mask_sub_epi8(a,_mm512_movepi8_mask(b),z,a) void nrLDPC_cnProc_BG1_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); + __m512i zmm0, min, sgn,zeros,maxLLR; + zeros = _mm512_setzero_si512(); maxLLR = _mm512_set1_epi8((char)127); - for (int i=0;i<2;i+=2) { - zmm0 = ((__m512i*)cnProcBuf)[6+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + for (int i=0;i<1;i+=2) { + sgn = ((__m512i*)cnProcBuf)[6+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[12+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[0+i] = _mm512_sign_epi16(min, sgn); - zmm0 = ((__m512i*)cnProcBuf)[7+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + ((__m512i*)cnProcBufRes)[0+i] = conditional_negate(min, sgn,zeros); + sgn = ((__m512i*)cnProcBuf)[7+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[13+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i+=2) { - zmm0 = ((__m512i*)cnProcBuf)[0+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + for (int i=0;i<1;i+=2) { + sgn = ((__m512i*)cnProcBuf)[0+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[12+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[12+i] = _mm512_sign_epi16(min, sgn); - zmm0 = ((__m512i*)cnProcBuf)[1+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + ((__m512i*)cnProcBufRes)[6+i] = conditional_negate(min, sgn,zeros); + sgn = ((__m512i*)cnProcBuf)[1+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[13+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[13+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[7+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i+=2) { - zmm0 = ((__m512i*)cnProcBuf)[0+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + for (int i=0;i<1;i+=2) { + sgn = ((__m512i*)cnProcBuf)[0+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[6+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[24+i] = _mm512_sign_epi16(min, sgn); - zmm0 = ((__m512i*)cnProcBuf)[1+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + ((__m512i*)cnProcBufRes)[12+i] = conditional_negate(min, sgn,zeros); + sgn = ((__m512i*)cnProcBuf)[1+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[7+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[25+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[13+i] = conditional_negate(min, sgn,zeros); } //Process group with 4 BNs - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[66+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[96+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[48+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[78+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[126+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[108+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[36+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[18+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[36+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[96+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[18+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[78+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[126+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[108+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[96+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[48+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[36+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[66+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[18+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[48+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[126+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[108+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[156+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[78+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[36+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[66+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[18+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[48+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[96+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[78+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[216+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[108+i] = conditional_negate(min, sgn,zeros); } //Process group with 5 BNs - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[384+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[246+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[276+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[138+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[492+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[246+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[384+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[246+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[708+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[354+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[384+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[246+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[924+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[462+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[384+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[246+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1140+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[570+i] = conditional_negate(min, sgn,zeros); } //Process group with 6 BNs - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[726+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1356+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[678+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1452+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[726+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1548+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[774+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1644+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[822+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1740+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[870+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1836+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[918+i] = conditional_negate(min, sgn,zeros); } //Process group with 7 BNs - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + for (int i=0;i<1;i++) { + sgn= ((__m512i*)cnProcBuf)[996+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1932+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[966+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + for (int i=0;i<1;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1992+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[996+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<1;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2052+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1026+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<1;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2112+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1056+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<1;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2172+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1086+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<1;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2232+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1116+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<1;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2292+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1146+i] = conditional_negate(min, sgn,zeros); } //Process group with 8 BNs - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1188+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2352+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1176+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2376+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1188+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2400+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1200+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2424+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1212+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2448+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1224+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2472+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1236+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2496+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1248+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2472+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2520+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1260+i] = conditional_negate(min, sgn,zeros); } //Process group with 9 BNs - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2544+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1272+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2568+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1284+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2592+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1296+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2616+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1308+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2640+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1320+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2664+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1332+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2688+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1344+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2712+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1356+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2736+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1368+i] = conditional_negate(min, sgn, zeros); } //Process group with 10 BNs - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1386+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2760+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1380+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2772+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1386+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2784+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1392+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2796+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1398+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2808+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1404+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2820+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1410+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2832+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1416+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2844+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1422+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2856+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1428+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2868+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1434+i] = conditional_negate(min,sgn,zeros); } //Process group with 19 BNs - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1464+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2880+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1440+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2928+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1464+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2976+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1488+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3024+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1512+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3072+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1536+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3120+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1560+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3168+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1584+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3216+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1608+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3264+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1632+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3312+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1656+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3360+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1680+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3408+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1704+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3456+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1728+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3504+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1752+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3552+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1776+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3600+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1800+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3648+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1824+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3696+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1848+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3744+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1872+i] = conditional_negate(min, sgn,zeros); } } diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z60_13_AVX512.c b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z60_13_AVX512.c index 7388cfc93c..df5670b10f 100644 --- a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z60_13_AVX512.c +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z60_13_AVX512.c @@ -1,2340 +1,2261 @@ #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; -} +#define conditional_negate(a,b,z) _mm512_mask_sub_epi8(a,_mm512_movepi8_mask(b),z,a) void nrLDPC_cnProc_BG1_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); + __m512i zmm0, min, sgn,zeros,maxLLR; + zeros = _mm512_setzero_si512(); maxLLR = _mm512_set1_epi8((char)127); - for (int i=0;i<3;i+=2) { - zmm0 = ((__m512i*)cnProcBuf)[6+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + for (int i=0;i<1;i+=2) { + sgn = ((__m512i*)cnProcBuf)[6+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[12+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[0+i] = _mm512_sign_epi16(min, sgn); - zmm0 = ((__m512i*)cnProcBuf)[7+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + ((__m512i*)cnProcBufRes)[0+i] = conditional_negate(min, sgn,zeros); + sgn = ((__m512i*)cnProcBuf)[7+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[13+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i+=2) { - zmm0 = ((__m512i*)cnProcBuf)[0+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + for (int i=0;i<1;i+=2) { + sgn = ((__m512i*)cnProcBuf)[0+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[12+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[12+i] = _mm512_sign_epi16(min, sgn); - zmm0 = ((__m512i*)cnProcBuf)[1+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + ((__m512i*)cnProcBufRes)[6+i] = conditional_negate(min, sgn,zeros); + sgn = ((__m512i*)cnProcBuf)[1+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[13+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[13+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[7+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i+=2) { - zmm0 = ((__m512i*)cnProcBuf)[0+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + for (int i=0;i<1;i+=2) { + sgn = ((__m512i*)cnProcBuf)[0+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[6+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[24+i] = _mm512_sign_epi16(min, sgn); - zmm0 = ((__m512i*)cnProcBuf)[1+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + ((__m512i*)cnProcBufRes)[12+i] = conditional_negate(min, sgn,zeros); + sgn = ((__m512i*)cnProcBuf)[1+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[7+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[25+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[13+i] = conditional_negate(min, sgn,zeros); } //Process group with 4 BNs - for (int i=0;i<11;i++) { - zmm0 = ((__m512i*)cnProcBuf)[66+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[96+i]; + for (int i=0;i<5;i++) { + sgn = ((__m512i*)cnProcBuf)[48+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[78+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[126+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[108+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[36+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[18+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<11;i++) { - zmm0 = ((__m512i*)cnProcBuf)[36+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[96+i]; + for (int i=0;i<5;i++) { + sgn = ((__m512i*)cnProcBuf)[18+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[78+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[126+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[108+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[96+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[48+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<11;i++) { - zmm0 = ((__m512i*)cnProcBuf)[36+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[66+i]; + for (int i=0;i<5;i++) { + sgn = ((__m512i*)cnProcBuf)[18+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[48+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[126+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[108+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[156+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[78+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<11;i++) { - zmm0 = ((__m512i*)cnProcBuf)[36+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[66+i]; + for (int i=0;i<5;i++) { + sgn = ((__m512i*)cnProcBuf)[18+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[48+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[96+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[78+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[216+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[108+i] = conditional_negate(min, sgn,zeros); } //Process group with 5 BNs - for (int i=0;i<35;i++) { - zmm0 = ((__m512i*)cnProcBuf)[384+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + for (int i=0;i<17;i++) { + sgn = ((__m512i*)cnProcBuf)[246+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[276+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[138+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<35;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + for (int i=0;i<17;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[492+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[246+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<35;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[384+i]; + for (int i=0;i<17;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[246+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[708+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[354+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<35;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[384+i]; + for (int i=0;i<17;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[246+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[924+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[462+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<35;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[384+i]; + for (int i=0;i<17;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[246+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1140+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[570+i] = conditional_negate(min, sgn,zeros); } //Process group with 6 BNs - for (int i=0;i<16;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + for (int i=0;i<8;i++) { + sgn = ((__m512i*)cnProcBuf)[726+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1356+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[678+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<16;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + for (int i=0;i<8;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1452+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[726+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<16;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<8;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1548+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[774+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<16;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<8;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1644+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[822+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<16;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<8;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1740+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[870+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<16;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<8;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1836+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[918+i] = conditional_negate(min, sgn,zeros); } //Process group with 7 BNs - for (int i=0;i<11;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + for (int i=0;i<5;i++) { + sgn= ((__m512i*)cnProcBuf)[996+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1932+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[966+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<11;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + for (int i=0;i<5;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1992+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[996+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<11;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<5;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2052+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1026+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<11;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<5;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2112+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1056+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<11;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<5;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2172+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1086+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<11;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<5;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2232+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1116+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<11;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<5;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2292+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1146+i] = conditional_negate(min, sgn,zeros); } //Process group with 8 BNs - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1188+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2352+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1176+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2376+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1188+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2400+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1200+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2424+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1212+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2448+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1224+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2472+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1236+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2496+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1248+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2472+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2520+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1260+i] = conditional_negate(min, sgn,zeros); } //Process group with 9 BNs - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2544+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1272+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2568+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1284+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2592+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1296+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2616+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1308+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2640+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1320+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2664+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1332+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2688+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1344+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2712+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1356+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2736+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1368+i] = conditional_negate(min, sgn, zeros); } //Process group with 10 BNs - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1386+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2760+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1380+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2772+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1386+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2784+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1392+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2796+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1398+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2808+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1404+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2820+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1410+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2832+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1416+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2844+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1422+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2856+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1428+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2868+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1434+i] = conditional_negate(min,sgn,zeros); } //Process group with 19 BNs - for (int i=0;i<9;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[1464+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2880+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1440+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<9;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2928+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1464+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<9;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2976+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1488+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<9;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3024+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1512+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<9;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3072+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1536+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<9;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3120+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1560+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<9;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3168+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1584+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<9;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3216+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1608+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<9;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3264+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1632+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<9;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3312+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1656+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<9;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3360+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1680+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<9;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3408+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1704+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<9;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3456+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1728+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<9;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3504+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1752+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<9;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3552+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1776+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<9;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3600+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1800+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<9;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3648+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1824+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<9;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3696+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1848+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<9;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3744+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1872+i] = conditional_negate(min, sgn,zeros); } } diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z64_13_AVX512.c b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z64_13_AVX512.c index 344c581d07..c3addcbd48 100644 --- a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z64_13_AVX512.c +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z64_13_AVX512.c @@ -1,2340 +1,2261 @@ #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; -} +#define conditional_negate(a,b,z) _mm512_mask_sub_epi8(a,_mm512_movepi8_mask(b),z,a) void nrLDPC_cnProc_BG1_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); + __m512i zmm0, min, sgn,zeros,maxLLR; + zeros = _mm512_setzero_si512(); maxLLR = _mm512_set1_epi8((char)127); - for (int i=0;i<3;i+=2) { - zmm0 = ((__m512i*)cnProcBuf)[6+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + for (int i=0;i<1;i+=2) { + sgn = ((__m512i*)cnProcBuf)[6+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[12+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[0+i] = _mm512_sign_epi16(min, sgn); - zmm0 = ((__m512i*)cnProcBuf)[7+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + ((__m512i*)cnProcBufRes)[0+i] = conditional_negate(min, sgn,zeros); + sgn = ((__m512i*)cnProcBuf)[7+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[13+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i+=2) { - zmm0 = ((__m512i*)cnProcBuf)[0+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + for (int i=0;i<1;i+=2) { + sgn = ((__m512i*)cnProcBuf)[0+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[12+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[12+i] = _mm512_sign_epi16(min, sgn); - zmm0 = ((__m512i*)cnProcBuf)[1+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + ((__m512i*)cnProcBufRes)[6+i] = conditional_negate(min, sgn,zeros); + sgn = ((__m512i*)cnProcBuf)[1+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[13+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[13+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[7+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i+=2) { - zmm0 = ((__m512i*)cnProcBuf)[0+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + for (int i=0;i<1;i+=2) { + sgn = ((__m512i*)cnProcBuf)[0+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[6+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[24+i] = _mm512_sign_epi16(min, sgn); - zmm0 = ((__m512i*)cnProcBuf)[1+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + ((__m512i*)cnProcBufRes)[12+i] = conditional_negate(min, sgn,zeros); + sgn = ((__m512i*)cnProcBuf)[1+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[7+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[25+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[13+i] = conditional_negate(min, sgn,zeros); } //Process group with 4 BNs - for (int i=0;i<11;i++) { - zmm0 = ((__m512i*)cnProcBuf)[66+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[96+i]; + for (int i=0;i<5;i++) { + sgn = ((__m512i*)cnProcBuf)[48+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[78+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[126+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[108+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[36+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[18+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<11;i++) { - zmm0 = ((__m512i*)cnProcBuf)[36+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[96+i]; + for (int i=0;i<5;i++) { + sgn = ((__m512i*)cnProcBuf)[18+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[78+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[126+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[108+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[96+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[48+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<11;i++) { - zmm0 = ((__m512i*)cnProcBuf)[36+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[66+i]; + for (int i=0;i<5;i++) { + sgn = ((__m512i*)cnProcBuf)[18+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[48+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[126+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[108+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[156+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[78+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<11;i++) { - zmm0 = ((__m512i*)cnProcBuf)[36+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[66+i]; + for (int i=0;i<5;i++) { + sgn = ((__m512i*)cnProcBuf)[18+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[48+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[96+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[78+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[216+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[108+i] = conditional_negate(min, sgn,zeros); } //Process group with 5 BNs - for (int i=0;i<37;i++) { - zmm0 = ((__m512i*)cnProcBuf)[384+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + for (int i=0;i<18;i++) { + sgn = ((__m512i*)cnProcBuf)[246+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[276+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[138+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<37;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + for (int i=0;i<18;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[492+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[246+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<37;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[384+i]; + for (int i=0;i<18;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[246+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[708+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[354+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<37;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[384+i]; + for (int i=0;i<18;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[246+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[924+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[462+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<37;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[384+i]; + for (int i=0;i<18;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[246+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1140+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[570+i] = conditional_negate(min, sgn,zeros); } //Process group with 6 BNs - for (int i=0;i<17;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + for (int i=0;i<8;i++) { + sgn = ((__m512i*)cnProcBuf)[726+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1356+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[678+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<17;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + for (int i=0;i<8;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1452+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[726+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<17;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<8;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1548+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[774+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<17;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<8;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1644+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[822+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<17;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<8;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1740+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[870+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<17;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<8;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1836+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[918+i] = conditional_negate(min, sgn,zeros); } //Process group with 7 BNs - for (int i=0;i<11;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + for (int i=0;i<5;i++) { + sgn= ((__m512i*)cnProcBuf)[996+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1932+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[966+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<11;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + for (int i=0;i<5;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1992+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[996+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<11;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<5;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2052+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1026+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<11;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<5;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2112+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1056+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<11;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<5;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2172+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1086+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<11;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<5;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2232+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1116+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<11;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<5;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2292+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1146+i] = conditional_negate(min, sgn,zeros); } //Process group with 8 BNs - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1188+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2352+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1176+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2376+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1188+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2400+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1200+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2424+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1212+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2448+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1224+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2472+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1236+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2496+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1248+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2472+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2520+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1260+i] = conditional_negate(min, sgn,zeros); } //Process group with 9 BNs - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2544+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1272+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2568+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1284+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2592+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1296+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2616+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1308+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2640+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1320+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2664+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1332+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2688+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1344+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2712+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1356+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2736+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1368+i] = conditional_negate(min, sgn, zeros); } //Process group with 10 BNs - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1386+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2760+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1380+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2772+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1386+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2784+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1392+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2796+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1398+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2808+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1404+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2820+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1410+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2832+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1416+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2844+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1422+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2856+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1428+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2868+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1434+i] = conditional_negate(min,sgn,zeros); } //Process group with 19 BNs - for (int i=0;i<9;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[1464+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2880+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1440+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<9;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2928+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1464+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<9;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2976+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1488+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<9;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3024+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1512+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<9;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3072+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1536+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<9;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3120+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1560+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<9;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3168+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1584+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<9;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3216+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1608+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<9;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3264+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1632+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<9;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3312+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1656+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<9;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3360+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1680+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<9;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3408+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1704+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<9;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3456+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1728+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<9;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3504+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1752+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<9;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3552+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1776+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<9;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3600+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1800+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<9;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3648+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1824+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<9;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3696+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1848+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<9;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<4;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3744+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1872+i] = conditional_negate(min, sgn,zeros); } } diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z6_13_AVX512.c b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z6_13_AVX512.c index f36090f3c5..1fb8a310ab 100644 --- a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z6_13_AVX512.c +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z6_13_AVX512.c @@ -1,2340 +1,2261 @@ #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; -} +#define conditional_negate(a,b,z) _mm512_mask_sub_epi8(a,_mm512_movepi8_mask(b),z,a) void nrLDPC_cnProc_BG1_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); + __m512i zmm0, min, sgn,zeros,maxLLR; + zeros = _mm512_setzero_si512(); maxLLR = _mm512_set1_epi8((char)127); - for (int i=0;i<2;i+=2) { - zmm0 = ((__m512i*)cnProcBuf)[6+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + for (int i=0;i<1;i+=2) { + sgn = ((__m512i*)cnProcBuf)[6+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[12+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[0+i] = _mm512_sign_epi16(min, sgn); - zmm0 = ((__m512i*)cnProcBuf)[7+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + ((__m512i*)cnProcBufRes)[0+i] = conditional_negate(min, sgn,zeros); + sgn = ((__m512i*)cnProcBuf)[7+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[13+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i+=2) { - zmm0 = ((__m512i*)cnProcBuf)[0+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + for (int i=0;i<1;i+=2) { + sgn = ((__m512i*)cnProcBuf)[0+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[12+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[12+i] = _mm512_sign_epi16(min, sgn); - zmm0 = ((__m512i*)cnProcBuf)[1+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + ((__m512i*)cnProcBufRes)[6+i] = conditional_negate(min, sgn,zeros); + sgn = ((__m512i*)cnProcBuf)[1+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[13+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[13+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[7+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i+=2) { - zmm0 = ((__m512i*)cnProcBuf)[0+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + for (int i=0;i<1;i+=2) { + sgn = ((__m512i*)cnProcBuf)[0+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[6+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[24+i] = _mm512_sign_epi16(min, sgn); - zmm0 = ((__m512i*)cnProcBuf)[1+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + ((__m512i*)cnProcBufRes)[12+i] = conditional_negate(min, sgn,zeros); + sgn = ((__m512i*)cnProcBuf)[1+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[7+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[25+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[13+i] = conditional_negate(min, sgn,zeros); } //Process group with 4 BNs - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[66+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[96+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[48+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[78+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[126+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[108+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[36+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[18+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[36+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[96+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[18+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[78+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[126+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[108+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[96+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[48+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[36+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[66+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[18+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[48+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[126+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[108+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[156+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[78+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[36+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[66+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[18+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[48+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[96+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[78+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[216+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[108+i] = conditional_negate(min, sgn,zeros); } //Process group with 5 BNs - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[384+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[246+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[276+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[138+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[492+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[246+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[384+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[246+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[708+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[354+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[384+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[246+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[924+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[462+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[384+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[246+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1140+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[570+i] = conditional_negate(min, sgn,zeros); } //Process group with 6 BNs - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[726+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1356+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[678+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1452+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[726+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1548+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[774+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1644+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[822+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1740+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[870+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1836+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[918+i] = conditional_negate(min, sgn,zeros); } //Process group with 7 BNs - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + for (int i=0;i<1;i++) { + sgn= ((__m512i*)cnProcBuf)[996+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1932+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[966+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + for (int i=0;i<1;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1992+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[996+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<1;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2052+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1026+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<1;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2112+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1056+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<1;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2172+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1086+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<1;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2232+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1116+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<1;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2292+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1146+i] = conditional_negate(min, sgn,zeros); } //Process group with 8 BNs - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1188+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2352+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1176+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2376+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1188+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2400+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1200+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2424+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1212+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2448+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1224+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2472+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1236+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2496+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1248+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2472+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2520+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1260+i] = conditional_negate(min, sgn,zeros); } //Process group with 9 BNs - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2544+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1272+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2568+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1284+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2592+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1296+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2616+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1308+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2640+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1320+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2664+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1332+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2688+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1344+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2712+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1356+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2736+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1368+i] = conditional_negate(min, sgn, zeros); } //Process group with 10 BNs - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1386+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2760+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1380+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2772+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1386+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2784+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1392+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2796+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1398+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2808+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1404+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2820+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1410+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2832+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1416+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2844+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1422+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2856+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1428+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2868+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1434+i] = conditional_negate(min,sgn,zeros); } //Process group with 19 BNs - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1464+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2880+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1440+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2928+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1464+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2976+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1488+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3024+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1512+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3072+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1536+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3120+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1560+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3168+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1584+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3216+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1608+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3264+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1632+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3312+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1656+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3360+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1680+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3408+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1704+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3456+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1728+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3504+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1752+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3552+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1776+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3600+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1800+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3648+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1824+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3696+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1848+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3744+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1872+i] = conditional_negate(min, sgn,zeros); } } diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z72_13_AVX512.c b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z72_13_AVX512.c index 7cd843079a..5f6e1e3946 100644 --- a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z72_13_AVX512.c +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z72_13_AVX512.c @@ -1,2340 +1,2261 @@ #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; -} +#define conditional_negate(a,b,z) _mm512_mask_sub_epi8(a,_mm512_movepi8_mask(b),z,a) void nrLDPC_cnProc_BG1_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); + __m512i zmm0, min, sgn,zeros,maxLLR; + zeros = _mm512_setzero_si512(); maxLLR = _mm512_set1_epi8((char)127); - for (int i=0;i<4;i+=2) { - zmm0 = ((__m512i*)cnProcBuf)[6+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + for (int i=0;i<2;i+=2) { + sgn = ((__m512i*)cnProcBuf)[6+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[12+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[0+i] = _mm512_sign_epi16(min, sgn); - zmm0 = ((__m512i*)cnProcBuf)[7+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + ((__m512i*)cnProcBufRes)[0+i] = conditional_negate(min, sgn,zeros); + sgn = ((__m512i*)cnProcBuf)[7+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[13+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<4;i+=2) { - zmm0 = ((__m512i*)cnProcBuf)[0+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + for (int i=0;i<2;i+=2) { + sgn = ((__m512i*)cnProcBuf)[0+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[12+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[12+i] = _mm512_sign_epi16(min, sgn); - zmm0 = ((__m512i*)cnProcBuf)[1+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + ((__m512i*)cnProcBufRes)[6+i] = conditional_negate(min, sgn,zeros); + sgn = ((__m512i*)cnProcBuf)[1+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[13+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[13+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[7+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<4;i+=2) { - zmm0 = ((__m512i*)cnProcBuf)[0+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + for (int i=0;i<2;i+=2) { + sgn = ((__m512i*)cnProcBuf)[0+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[6+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[24+i] = _mm512_sign_epi16(min, sgn); - zmm0 = ((__m512i*)cnProcBuf)[1+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + ((__m512i*)cnProcBufRes)[12+i] = conditional_negate(min, sgn,zeros); + sgn = ((__m512i*)cnProcBuf)[1+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[7+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[25+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[13+i] = conditional_negate(min, sgn,zeros); } //Process group with 4 BNs - for (int i=0;i<13;i++) { - zmm0 = ((__m512i*)cnProcBuf)[66+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[96+i]; + for (int i=0;i<6;i++) { + sgn = ((__m512i*)cnProcBuf)[48+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[78+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[126+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[108+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[36+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[18+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<13;i++) { - zmm0 = ((__m512i*)cnProcBuf)[36+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[96+i]; + for (int i=0;i<6;i++) { + sgn = ((__m512i*)cnProcBuf)[18+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[78+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[126+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[108+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[96+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[48+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<13;i++) { - zmm0 = ((__m512i*)cnProcBuf)[36+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[66+i]; + for (int i=0;i<6;i++) { + sgn = ((__m512i*)cnProcBuf)[18+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[48+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[126+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[108+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[156+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[78+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<13;i++) { - zmm0 = ((__m512i*)cnProcBuf)[36+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[66+i]; + for (int i=0;i<6;i++) { + sgn = ((__m512i*)cnProcBuf)[18+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[48+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[96+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[78+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[216+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[108+i] = conditional_negate(min, sgn,zeros); } //Process group with 5 BNs - for (int i=0;i<42;i++) { - zmm0 = ((__m512i*)cnProcBuf)[384+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + for (int i=0;i<21;i++) { + sgn = ((__m512i*)cnProcBuf)[246+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[276+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[138+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<42;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + for (int i=0;i<21;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[492+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[246+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<42;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[384+i]; + for (int i=0;i<21;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[246+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[708+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[354+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<42;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[384+i]; + for (int i=0;i<21;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[246+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[924+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[462+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<42;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[384+i]; + for (int i=0;i<21;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[246+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1140+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[570+i] = conditional_negate(min, sgn,zeros); } //Process group with 6 BNs - for (int i=0;i<19;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + for (int i=0;i<9;i++) { + sgn = ((__m512i*)cnProcBuf)[726+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1356+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[678+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<19;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + for (int i=0;i<9;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1452+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[726+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<19;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<9;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1548+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[774+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<19;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<9;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1644+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[822+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<19;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<9;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1740+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[870+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<19;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<9;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1836+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[918+i] = conditional_negate(min, sgn,zeros); } //Process group with 7 BNs - for (int i=0;i<13;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + for (int i=0;i<6;i++) { + sgn= ((__m512i*)cnProcBuf)[996+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1932+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[966+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<13;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + for (int i=0;i<6;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1992+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[996+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<13;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<6;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2052+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1026+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<13;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<6;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2112+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1056+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<13;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<6;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2172+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1086+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<13;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<6;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2232+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1116+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<13;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<6;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2292+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1146+i] = conditional_negate(min, sgn,zeros); } //Process group with 8 BNs - for (int i=0;i<6;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[1188+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2352+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1176+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<6;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2376+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1188+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<6;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2400+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1200+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<6;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2424+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1212+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<6;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2448+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1224+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<6;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2472+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1236+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<6;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2496+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1248+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<6;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2472+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2520+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1260+i] = conditional_negate(min, sgn,zeros); } //Process group with 9 BNs - for (int i=0;i<6;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2544+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1272+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<6;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2568+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1284+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<6;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2592+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1296+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<6;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2616+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1308+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<6;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2640+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1320+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<6;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2664+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1332+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<6;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2688+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1344+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<6;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2712+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1356+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<6;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2736+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1368+i] = conditional_negate(min, sgn, zeros); } //Process group with 10 BNs - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1386+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2760+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1380+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2772+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1386+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2784+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1392+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2796+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1398+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2808+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1404+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2820+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1410+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2832+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1416+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2844+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1422+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2856+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1428+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2868+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1434+i] = conditional_negate(min,sgn,zeros); } //Process group with 19 BNs - for (int i=0;i<10;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + for (int i=0;i<5;i++) { + sgn = ((__m512i*)cnProcBuf)[1464+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2880+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1440+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<10;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + for (int i=0;i<5;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2928+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1464+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<10;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<5;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2976+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1488+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<10;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<5;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3024+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1512+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<10;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<5;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3072+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1536+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<10;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<5;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3120+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1560+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<10;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<5;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3168+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1584+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<10;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<5;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3216+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1608+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<10;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<5;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3264+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1632+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<10;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<5;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3312+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1656+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<10;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<5;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3360+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1680+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<10;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<5;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3408+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1704+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<10;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<5;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3456+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1728+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<10;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<5;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3504+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1752+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<10;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<5;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3552+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1776+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<10;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<5;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3600+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1800+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<10;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<5;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3648+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1824+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<10;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<5;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3696+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1848+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<10;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<5;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3744+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1872+i] = conditional_negate(min, sgn,zeros); } } diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z7_13_AVX512.c b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z7_13_AVX512.c index b6b2217da5..21f4623647 100644 --- a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z7_13_AVX512.c +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z7_13_AVX512.c @@ -1,2340 +1,2261 @@ #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; -} +#define conditional_negate(a,b,z) _mm512_mask_sub_epi8(a,_mm512_movepi8_mask(b),z,a) void nrLDPC_cnProc_BG1_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); + __m512i zmm0, min, sgn,zeros,maxLLR; + zeros = _mm512_setzero_si512(); maxLLR = _mm512_set1_epi8((char)127); - for (int i=0;i<2;i+=2) { - zmm0 = ((__m512i*)cnProcBuf)[6+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + for (int i=0;i<1;i+=2) { + sgn = ((__m512i*)cnProcBuf)[6+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[12+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[0+i] = _mm512_sign_epi16(min, sgn); - zmm0 = ((__m512i*)cnProcBuf)[7+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + ((__m512i*)cnProcBufRes)[0+i] = conditional_negate(min, sgn,zeros); + sgn = ((__m512i*)cnProcBuf)[7+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[13+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i+=2) { - zmm0 = ((__m512i*)cnProcBuf)[0+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + for (int i=0;i<1;i+=2) { + sgn = ((__m512i*)cnProcBuf)[0+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[12+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[12+i] = _mm512_sign_epi16(min, sgn); - zmm0 = ((__m512i*)cnProcBuf)[1+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + ((__m512i*)cnProcBufRes)[6+i] = conditional_negate(min, sgn,zeros); + sgn = ((__m512i*)cnProcBuf)[1+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[13+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[13+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[7+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i+=2) { - zmm0 = ((__m512i*)cnProcBuf)[0+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + for (int i=0;i<1;i+=2) { + sgn = ((__m512i*)cnProcBuf)[0+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[6+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[24+i] = _mm512_sign_epi16(min, sgn); - zmm0 = ((__m512i*)cnProcBuf)[1+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + ((__m512i*)cnProcBufRes)[12+i] = conditional_negate(min, sgn,zeros); + sgn = ((__m512i*)cnProcBuf)[1+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[7+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[25+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[13+i] = conditional_negate(min, sgn,zeros); } //Process group with 4 BNs - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[66+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[96+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[48+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[78+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[126+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[108+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[36+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[18+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[36+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[96+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[18+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[78+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[126+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[108+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[96+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[48+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[36+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[66+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[18+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[48+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[126+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[108+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[156+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[78+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[36+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[66+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[18+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[48+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[96+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[78+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[216+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[108+i] = conditional_negate(min, sgn,zeros); } //Process group with 5 BNs - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[384+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[246+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[276+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[138+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[492+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[246+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[384+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[246+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[708+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[354+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[384+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[246+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[924+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[462+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<5;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[384+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[246+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1140+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[570+i] = conditional_negate(min, sgn,zeros); } //Process group with 6 BNs - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[726+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1356+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[678+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1452+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[726+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1548+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[774+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1644+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[822+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1740+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[870+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1836+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[918+i] = conditional_negate(min, sgn,zeros); } //Process group with 7 BNs - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + for (int i=0;i<1;i++) { + sgn= ((__m512i*)cnProcBuf)[996+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1932+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[966+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + for (int i=0;i<1;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1992+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[996+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<1;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2052+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1026+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<1;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2112+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1056+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<1;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2172+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1086+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<1;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2232+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1116+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<1;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2292+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1146+i] = conditional_negate(min, sgn,zeros); } //Process group with 8 BNs - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1188+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2352+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1176+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2376+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1188+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2400+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1200+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2424+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1212+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2448+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1224+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2472+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1236+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2496+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1248+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2472+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2520+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1260+i] = conditional_negate(min, sgn,zeros); } //Process group with 9 BNs - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2544+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1272+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2568+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1284+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2592+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1296+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2616+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1308+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2640+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1320+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2664+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1332+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2688+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1344+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2712+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1356+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2736+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1368+i] = conditional_negate(min, sgn, zeros); } //Process group with 10 BNs - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1386+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2760+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1380+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2772+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1386+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2784+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1392+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2796+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1398+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2808+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1404+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2820+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1410+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2832+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1416+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2844+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1422+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2856+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1428+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2868+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1434+i] = conditional_negate(min,sgn,zeros); } //Process group with 19 BNs - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1464+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2880+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1440+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2928+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1464+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2976+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1488+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3024+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1512+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3072+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1536+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3120+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1560+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3168+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1584+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3216+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1608+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3264+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1632+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3312+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1656+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3360+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1680+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3408+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1704+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3456+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1728+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3504+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1752+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3552+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1776+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3600+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1800+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3648+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1824+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3696+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1848+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3744+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1872+i] = conditional_negate(min, sgn,zeros); } } diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z80_13_AVX512.c b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z80_13_AVX512.c index 4270e81f94..35ec155a7b 100644 --- a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z80_13_AVX512.c +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z80_13_AVX512.c @@ -1,2340 +1,2261 @@ #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; -} +#define conditional_negate(a,b,z) _mm512_mask_sub_epi8(a,_mm512_movepi8_mask(b),z,a) void nrLDPC_cnProc_BG1_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); + __m512i zmm0, min, sgn,zeros,maxLLR; + zeros = _mm512_setzero_si512(); maxLLR = _mm512_set1_epi8((char)127); - for (int i=0;i<4;i+=2) { - zmm0 = ((__m512i*)cnProcBuf)[6+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + for (int i=0;i<2;i+=2) { + sgn = ((__m512i*)cnProcBuf)[6+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[12+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[0+i] = _mm512_sign_epi16(min, sgn); - zmm0 = ((__m512i*)cnProcBuf)[7+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + ((__m512i*)cnProcBufRes)[0+i] = conditional_negate(min, sgn,zeros); + sgn = ((__m512i*)cnProcBuf)[7+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[13+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<4;i+=2) { - zmm0 = ((__m512i*)cnProcBuf)[0+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + for (int i=0;i<2;i+=2) { + sgn = ((__m512i*)cnProcBuf)[0+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[12+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[12+i] = _mm512_sign_epi16(min, sgn); - zmm0 = ((__m512i*)cnProcBuf)[1+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + ((__m512i*)cnProcBufRes)[6+i] = conditional_negate(min, sgn,zeros); + sgn = ((__m512i*)cnProcBuf)[1+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[13+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[13+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[7+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<4;i+=2) { - zmm0 = ((__m512i*)cnProcBuf)[0+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + for (int i=0;i<2;i+=2) { + sgn = ((__m512i*)cnProcBuf)[0+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[6+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[24+i] = _mm512_sign_epi16(min, sgn); - zmm0 = ((__m512i*)cnProcBuf)[1+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + ((__m512i*)cnProcBufRes)[12+i] = conditional_negate(min, sgn,zeros); + sgn = ((__m512i*)cnProcBuf)[1+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[7+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[25+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[13+i] = conditional_negate(min, sgn,zeros); } //Process group with 4 BNs - for (int i=0;i<14;i++) { - zmm0 = ((__m512i*)cnProcBuf)[66+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[96+i]; + for (int i=0;i<7;i++) { + sgn = ((__m512i*)cnProcBuf)[48+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[78+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[126+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[108+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[36+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[18+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<14;i++) { - zmm0 = ((__m512i*)cnProcBuf)[36+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[96+i]; + for (int i=0;i<7;i++) { + sgn = ((__m512i*)cnProcBuf)[18+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[78+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[126+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[108+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[96+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[48+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<14;i++) { - zmm0 = ((__m512i*)cnProcBuf)[36+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[66+i]; + for (int i=0;i<7;i++) { + sgn = ((__m512i*)cnProcBuf)[18+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[48+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[126+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[108+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[156+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[78+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<14;i++) { - zmm0 = ((__m512i*)cnProcBuf)[36+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[66+i]; + for (int i=0;i<7;i++) { + sgn = ((__m512i*)cnProcBuf)[18+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[48+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[96+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[78+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[216+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[108+i] = conditional_negate(min, sgn,zeros); } //Process group with 5 BNs - for (int i=0;i<46;i++) { - zmm0 = ((__m512i*)cnProcBuf)[384+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + for (int i=0;i<23;i++) { + sgn = ((__m512i*)cnProcBuf)[246+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[276+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[138+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<46;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + for (int i=0;i<23;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[492+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[246+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<46;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[384+i]; + for (int i=0;i<23;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[246+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[708+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[354+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<46;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[384+i]; + for (int i=0;i<23;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[246+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[924+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[462+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<46;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[384+i]; + for (int i=0;i<23;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[246+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1140+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[570+i] = conditional_negate(min, sgn,zeros); } //Process group with 6 BNs - for (int i=0;i<21;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + for (int i=0;i<10;i++) { + sgn = ((__m512i*)cnProcBuf)[726+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1356+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[678+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<21;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + for (int i=0;i<10;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1452+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[726+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<21;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<10;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1548+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[774+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<21;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<10;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1644+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[822+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<21;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<10;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1740+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[870+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<21;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<10;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1836+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[918+i] = conditional_negate(min, sgn,zeros); } //Process group with 7 BNs - for (int i=0;i<14;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + for (int i=0;i<7;i++) { + sgn= ((__m512i*)cnProcBuf)[996+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1932+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[966+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<14;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + for (int i=0;i<7;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1992+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[996+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<14;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<7;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2052+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1026+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<14;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<7;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2112+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1056+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<14;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<7;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2172+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1086+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<14;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<7;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2232+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1116+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<14;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<7;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2292+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1146+i] = conditional_negate(min, sgn,zeros); } //Process group with 8 BNs - for (int i=0;i<6;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[1188+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2352+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1176+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<6;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2376+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1188+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<6;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2400+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1200+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<6;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2424+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1212+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<6;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2448+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1224+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<6;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2472+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1236+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<6;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2496+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1248+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<6;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2472+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2520+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1260+i] = conditional_negate(min, sgn,zeros); } //Process group with 9 BNs - for (int i=0;i<6;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2544+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1272+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<6;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2568+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1284+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<6;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2592+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1296+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<6;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2616+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1308+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<6;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2640+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1320+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<6;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2664+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1332+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<6;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2688+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1344+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<6;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2712+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1356+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<6;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2736+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1368+i] = conditional_negate(min, sgn, zeros); } //Process group with 10 BNs - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1386+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2760+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1380+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2772+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1386+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2784+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1392+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2796+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1398+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2808+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1404+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2820+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1410+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2832+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1416+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2844+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1422+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2856+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1428+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2868+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1434+i] = conditional_negate(min,sgn,zeros); } //Process group with 19 BNs - for (int i=0;i<11;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + for (int i=0;i<5;i++) { + sgn = ((__m512i*)cnProcBuf)[1464+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2880+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1440+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<11;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + for (int i=0;i<5;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2928+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1464+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<11;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<5;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2976+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1488+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<11;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<5;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3024+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1512+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<11;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<5;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3072+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1536+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<11;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<5;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3120+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1560+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<11;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<5;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3168+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1584+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<11;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<5;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3216+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1608+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<11;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<5;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3264+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1632+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<11;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<5;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3312+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1656+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<11;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<5;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3360+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1680+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<11;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<5;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3408+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1704+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<11;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<5;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3456+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1728+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<11;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<5;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3504+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1752+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<11;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<5;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3552+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1776+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<11;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<5;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3600+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1800+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<11;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<5;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3648+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1824+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<11;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<5;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3696+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1848+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<11;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<5;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3744+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1872+i] = conditional_negate(min, sgn,zeros); } } diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z88_13_AVX512.c b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z88_13_AVX512.c index e57da338bb..be4ee80c38 100644 --- a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z88_13_AVX512.c +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z88_13_AVX512.c @@ -1,2340 +1,2261 @@ #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; -} +#define conditional_negate(a,b,z) _mm512_mask_sub_epi8(a,_mm512_movepi8_mask(b),z,a) void nrLDPC_cnProc_BG1_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); + __m512i zmm0, min, sgn,zeros,maxLLR; + zeros = _mm512_setzero_si512(); maxLLR = _mm512_set1_epi8((char)127); - for (int i=0;i<4;i+=2) { - zmm0 = ((__m512i*)cnProcBuf)[6+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + for (int i=0;i<2;i+=2) { + sgn = ((__m512i*)cnProcBuf)[6+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[12+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[0+i] = _mm512_sign_epi16(min, sgn); - zmm0 = ((__m512i*)cnProcBuf)[7+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + ((__m512i*)cnProcBufRes)[0+i] = conditional_negate(min, sgn,zeros); + sgn = ((__m512i*)cnProcBuf)[7+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[13+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<4;i+=2) { - zmm0 = ((__m512i*)cnProcBuf)[0+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + for (int i=0;i<2;i+=2) { + sgn = ((__m512i*)cnProcBuf)[0+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[12+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[12+i] = _mm512_sign_epi16(min, sgn); - zmm0 = ((__m512i*)cnProcBuf)[1+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + ((__m512i*)cnProcBufRes)[6+i] = conditional_negate(min, sgn,zeros); + sgn = ((__m512i*)cnProcBuf)[1+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[13+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[13+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[7+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<4;i+=2) { - zmm0 = ((__m512i*)cnProcBuf)[0+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + for (int i=0;i<2;i+=2) { + sgn = ((__m512i*)cnProcBuf)[0+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[6+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[24+i] = _mm512_sign_epi16(min, sgn); - zmm0 = ((__m512i*)cnProcBuf)[1+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + ((__m512i*)cnProcBufRes)[12+i] = conditional_negate(min, sgn,zeros); + sgn = ((__m512i*)cnProcBuf)[1+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[7+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[25+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[13+i] = conditional_negate(min, sgn,zeros); } //Process group with 4 BNs - for (int i=0;i<15;i++) { - zmm0 = ((__m512i*)cnProcBuf)[66+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[96+i]; + for (int i=0;i<7;i++) { + sgn = ((__m512i*)cnProcBuf)[48+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[78+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[126+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[108+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[36+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[18+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<15;i++) { - zmm0 = ((__m512i*)cnProcBuf)[36+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[96+i]; + for (int i=0;i<7;i++) { + sgn = ((__m512i*)cnProcBuf)[18+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[78+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[126+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[108+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[96+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[48+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<15;i++) { - zmm0 = ((__m512i*)cnProcBuf)[36+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[66+i]; + for (int i=0;i<7;i++) { + sgn = ((__m512i*)cnProcBuf)[18+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[48+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[126+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[108+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[156+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[78+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<15;i++) { - zmm0 = ((__m512i*)cnProcBuf)[36+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[66+i]; + for (int i=0;i<7;i++) { + sgn = ((__m512i*)cnProcBuf)[18+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[48+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[96+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[78+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[216+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[108+i] = conditional_negate(min, sgn,zeros); } //Process group with 5 BNs - for (int i=0;i<51;i++) { - zmm0 = ((__m512i*)cnProcBuf)[384+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + for (int i=0;i<25;i++) { + sgn = ((__m512i*)cnProcBuf)[246+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[276+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[138+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<51;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + for (int i=0;i<25;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[492+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[246+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<51;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[384+i]; + for (int i=0;i<25;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[246+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[708+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[354+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<51;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[384+i]; + for (int i=0;i<25;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[246+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[924+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[462+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<51;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[384+i]; + for (int i=0;i<25;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[246+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1140+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[570+i] = conditional_negate(min, sgn,zeros); } //Process group with 6 BNs - for (int i=0;i<23;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + for (int i=0;i<11;i++) { + sgn = ((__m512i*)cnProcBuf)[726+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1356+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[678+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<23;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + for (int i=0;i<11;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1452+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[726+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<23;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<11;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1548+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[774+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<23;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<11;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1644+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[822+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<23;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<11;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1740+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[870+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<23;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<11;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1836+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[918+i] = conditional_negate(min, sgn,zeros); } //Process group with 7 BNs - for (int i=0;i<15;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + for (int i=0;i<7;i++) { + sgn= ((__m512i*)cnProcBuf)[996+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1932+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[966+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<15;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + for (int i=0;i<7;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1992+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[996+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<15;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<7;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2052+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1026+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<15;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<7;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2112+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1056+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<15;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<7;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2172+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1086+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<15;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<7;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2232+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1116+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<15;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<7;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2292+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1146+i] = conditional_negate(min, sgn,zeros); } //Process group with 8 BNs - for (int i=0;i<7;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[1188+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2352+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1176+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<7;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2376+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1188+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<7;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2400+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1200+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<7;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2424+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1212+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<7;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2448+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1224+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<7;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2472+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1236+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<7;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2496+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1248+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<7;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2472+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2520+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1260+i] = conditional_negate(min, sgn,zeros); } //Process group with 9 BNs - for (int i=0;i<7;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2544+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1272+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<7;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2568+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1284+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<7;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2592+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1296+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<7;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2616+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1308+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<7;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2640+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1320+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<7;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2664+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1332+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<7;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2688+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1344+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<7;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2712+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1356+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<7;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2736+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1368+i] = conditional_negate(min, sgn, zeros); } //Process group with 10 BNs - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1386+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2760+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1380+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2772+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1386+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2784+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1392+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2796+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1398+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2808+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1404+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2820+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1410+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2832+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1416+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2844+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1422+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2856+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1428+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2868+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1434+i] = conditional_negate(min,sgn,zeros); } //Process group with 19 BNs - for (int i=0;i<12;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + for (int i=0;i<6;i++) { + sgn = ((__m512i*)cnProcBuf)[1464+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2880+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1440+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<12;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + for (int i=0;i<6;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2928+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1464+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<12;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<6;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2976+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1488+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<12;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<6;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3024+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1512+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<12;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<6;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3072+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1536+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<12;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<6;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3120+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1560+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<12;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<6;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3168+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1584+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<12;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<6;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3216+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1608+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<12;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<6;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3264+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1632+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<12;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<6;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3312+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1656+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<12;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<6;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3360+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1680+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<12;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<6;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3408+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1704+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<12;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<6;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3456+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1728+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<12;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<6;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3504+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1752+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<12;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<6;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3552+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1776+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<12;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<6;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3600+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1800+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<12;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<6;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3648+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1824+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<12;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<6;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3696+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1848+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<12;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<6;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3744+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1872+i] = conditional_negate(min, sgn,zeros); } } diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z8_13_AVX512.c b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z8_13_AVX512.c index 0048bf497c..6a05ba3800 100644 --- a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z8_13_AVX512.c +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z8_13_AVX512.c @@ -1,2340 +1,2261 @@ #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; -} +#define conditional_negate(a,b,z) _mm512_mask_sub_epi8(a,_mm512_movepi8_mask(b),z,a) void nrLDPC_cnProc_BG1_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); + __m512i zmm0, min, sgn,zeros,maxLLR; + zeros = _mm512_setzero_si512(); maxLLR = _mm512_set1_epi8((char)127); - for (int i=0;i<2;i+=2) { - zmm0 = ((__m512i*)cnProcBuf)[6+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + for (int i=0;i<1;i+=2) { + sgn = ((__m512i*)cnProcBuf)[6+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[12+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[0+i] = _mm512_sign_epi16(min, sgn); - zmm0 = ((__m512i*)cnProcBuf)[7+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + ((__m512i*)cnProcBufRes)[0+i] = conditional_negate(min, sgn,zeros); + sgn = ((__m512i*)cnProcBuf)[7+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[13+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i+=2) { - zmm0 = ((__m512i*)cnProcBuf)[0+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + for (int i=0;i<1;i+=2) { + sgn = ((__m512i*)cnProcBuf)[0+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[12+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[12+i] = _mm512_sign_epi16(min, sgn); - zmm0 = ((__m512i*)cnProcBuf)[1+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + ((__m512i*)cnProcBufRes)[6+i] = conditional_negate(min, sgn,zeros); + sgn = ((__m512i*)cnProcBuf)[1+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[13+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[13+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[7+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i+=2) { - zmm0 = ((__m512i*)cnProcBuf)[0+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + for (int i=0;i<1;i+=2) { + sgn = ((__m512i*)cnProcBuf)[0+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[6+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[24+i] = _mm512_sign_epi16(min, sgn); - zmm0 = ((__m512i*)cnProcBuf)[1+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + ((__m512i*)cnProcBufRes)[12+i] = conditional_negate(min, sgn,zeros); + sgn = ((__m512i*)cnProcBuf)[1+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[7+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[25+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[13+i] = conditional_negate(min, sgn,zeros); } //Process group with 4 BNs - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[66+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[96+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[48+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[78+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[126+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[108+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[36+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[18+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[36+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[96+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[18+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[78+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[126+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[108+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[96+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[48+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[36+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[66+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[18+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[48+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[126+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[108+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[156+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[78+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[36+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[66+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[18+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[48+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[96+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[78+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[216+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[108+i] = conditional_negate(min, sgn,zeros); } //Process group with 5 BNs - for (int i=0;i<6;i++) { - zmm0 = ((__m512i*)cnProcBuf)[384+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[246+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[276+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[138+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<6;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[492+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[246+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<6;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[384+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[246+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[708+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[354+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<6;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[384+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[246+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[924+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[462+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<6;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[384+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[246+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1140+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[570+i] = conditional_negate(min, sgn,zeros); } //Process group with 6 BNs - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[726+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1356+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[678+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1452+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[726+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1548+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[774+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1644+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[822+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1740+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[870+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1836+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[918+i] = conditional_negate(min, sgn,zeros); } //Process group with 7 BNs - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + for (int i=0;i<1;i++) { + sgn= ((__m512i*)cnProcBuf)[996+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1932+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[966+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + for (int i=0;i<1;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1992+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[996+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<1;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2052+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1026+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<1;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2112+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1056+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<1;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2172+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1086+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<1;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2232+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1116+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<1;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2292+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1146+i] = conditional_negate(min, sgn,zeros); } //Process group with 8 BNs - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1188+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2352+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1176+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2376+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1188+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2400+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1200+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2424+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1212+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2448+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1224+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2472+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1236+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2496+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1248+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2472+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2520+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1260+i] = conditional_negate(min, sgn,zeros); } //Process group with 9 BNs - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2544+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1272+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2568+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1284+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2592+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1296+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2616+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1308+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2640+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1320+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2664+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1332+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2688+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1344+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2712+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1356+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2736+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1368+i] = conditional_negate(min, sgn, zeros); } //Process group with 10 BNs - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1386+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2760+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1380+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2772+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1386+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2784+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1392+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2796+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1398+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2808+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1404+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2820+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1410+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2832+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1416+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2844+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1422+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2856+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1428+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2868+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1434+i] = conditional_negate(min,sgn,zeros); } //Process group with 19 BNs - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1464+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2880+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1440+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2928+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1464+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2976+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1488+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3024+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1512+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3072+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1536+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3120+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1560+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3168+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1584+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3216+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1608+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3264+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1632+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3312+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1656+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3360+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1680+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3408+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1704+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3456+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1728+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3504+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1752+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3552+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1776+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3600+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1800+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3648+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1824+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3696+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1848+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3744+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1872+i] = conditional_negate(min, sgn,zeros); } } diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z96_13_AVX512.c b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z96_13_AVX512.c index f04b440837..4bf4f238f7 100644 --- a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z96_13_AVX512.c +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z96_13_AVX512.c @@ -1,2340 +1,2261 @@ #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; -} +#define conditional_negate(a,b,z) _mm512_mask_sub_epi8(a,_mm512_movepi8_mask(b),z,a) void nrLDPC_cnProc_BG1_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); + __m512i zmm0, min, sgn,zeros,maxLLR; + zeros = _mm512_setzero_si512(); maxLLR = _mm512_set1_epi8((char)127); - for (int i=0;i<4;i+=2) { - zmm0 = ((__m512i*)cnProcBuf)[6+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + for (int i=0;i<2;i+=2) { + sgn = ((__m512i*)cnProcBuf)[6+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[12+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[0+i] = _mm512_sign_epi16(min, sgn); - zmm0 = ((__m512i*)cnProcBuf)[7+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + ((__m512i*)cnProcBufRes)[0+i] = conditional_negate(min, sgn,zeros); + sgn = ((__m512i*)cnProcBuf)[7+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[13+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<4;i+=2) { - zmm0 = ((__m512i*)cnProcBuf)[0+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + for (int i=0;i<2;i+=2) { + sgn = ((__m512i*)cnProcBuf)[0+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[12+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[12+i] = _mm512_sign_epi16(min, sgn); - zmm0 = ((__m512i*)cnProcBuf)[1+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + ((__m512i*)cnProcBufRes)[6+i] = conditional_negate(min, sgn,zeros); + sgn = ((__m512i*)cnProcBuf)[1+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[13+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[13+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[7+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<4;i+=2) { - zmm0 = ((__m512i*)cnProcBuf)[0+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + for (int i=0;i<2;i+=2) { + sgn = ((__m512i*)cnProcBuf)[0+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[6+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[24+i] = _mm512_sign_epi16(min, sgn); - zmm0 = ((__m512i*)cnProcBuf)[1+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + ((__m512i*)cnProcBufRes)[12+i] = conditional_negate(min, sgn,zeros); + sgn = ((__m512i*)cnProcBuf)[1+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[7+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[25+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[13+i] = conditional_negate(min, sgn,zeros); } //Process group with 4 BNs - for (int i=0;i<16;i++) { - zmm0 = ((__m512i*)cnProcBuf)[66+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[96+i]; + for (int i=0;i<8;i++) { + sgn = ((__m512i*)cnProcBuf)[48+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[78+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[126+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[108+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[36+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[18+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<16;i++) { - zmm0 = ((__m512i*)cnProcBuf)[36+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[96+i]; + for (int i=0;i<8;i++) { + sgn = ((__m512i*)cnProcBuf)[18+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[78+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[126+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[108+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[96+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[48+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<16;i++) { - zmm0 = ((__m512i*)cnProcBuf)[36+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[66+i]; + for (int i=0;i<8;i++) { + sgn = ((__m512i*)cnProcBuf)[18+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[48+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[126+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[108+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[156+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[78+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<16;i++) { - zmm0 = ((__m512i*)cnProcBuf)[36+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[66+i]; + for (int i=0;i<8;i++) { + sgn = ((__m512i*)cnProcBuf)[18+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[48+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[96+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[78+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[216+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[108+i] = conditional_negate(min, sgn,zeros); } //Process group with 5 BNs - for (int i=0;i<55;i++) { - zmm0 = ((__m512i*)cnProcBuf)[384+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + for (int i=0;i<27;i++) { + sgn = ((__m512i*)cnProcBuf)[246+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[276+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[138+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<55;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + for (int i=0;i<27;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[492+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[246+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<55;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[384+i]; + for (int i=0;i<27;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[246+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[708+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[354+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<55;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[384+i]; + for (int i=0;i<27;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[246+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[924+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[462+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<55;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[384+i]; + for (int i=0;i<27;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[246+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1140+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[570+i] = conditional_negate(min, sgn,zeros); } //Process group with 6 BNs - for (int i=0;i<25;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + for (int i=0;i<12;i++) { + sgn = ((__m512i*)cnProcBuf)[726+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1356+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[678+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<25;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + for (int i=0;i<12;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1452+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[726+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<25;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<12;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1548+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[774+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<25;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<12;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1644+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[822+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<25;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<12;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1740+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[870+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<25;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<12;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1836+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[918+i] = conditional_negate(min, sgn,zeros); } //Process group with 7 BNs - for (int i=0;i<16;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + for (int i=0;i<8;i++) { + sgn= ((__m512i*)cnProcBuf)[996+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1932+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[966+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<16;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + for (int i=0;i<8;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1992+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[996+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<16;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<8;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2052+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1026+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<16;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<8;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2112+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1056+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<16;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<8;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2172+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1086+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<16;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<8;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2232+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1116+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<16;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<8;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2292+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1146+i] = conditional_negate(min, sgn,zeros); } //Process group with 8 BNs - for (int i=0;i<7;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[1188+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2352+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1176+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<7;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2376+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1188+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<7;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2400+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1200+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<7;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2424+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1212+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<7;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2448+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1224+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<7;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2472+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1236+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<7;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2496+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1248+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<7;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2472+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2520+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1260+i] = conditional_negate(min, sgn,zeros); } //Process group with 9 BNs - for (int i=0;i<7;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2544+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1272+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<7;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2568+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1284+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<7;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2592+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1296+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<7;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2616+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1308+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<7;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2640+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1320+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<7;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2664+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1332+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<7;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2688+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1344+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<7;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2712+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1356+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<7;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2736+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1368+i] = conditional_negate(min, sgn, zeros); } //Process group with 10 BNs - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1386+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2760+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1380+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2772+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1386+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2784+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1392+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2796+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1398+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2808+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1404+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2820+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1410+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2832+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1416+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2844+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1422+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2856+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1428+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2868+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1434+i] = conditional_negate(min,sgn,zeros); } //Process group with 19 BNs - for (int i=0;i<13;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + for (int i=0;i<6;i++) { + sgn = ((__m512i*)cnProcBuf)[1464+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2880+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1440+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<13;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + for (int i=0;i<6;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2928+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1464+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<13;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<6;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2976+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1488+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<13;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<6;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3024+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1512+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<13;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<6;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3072+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1536+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<13;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<6;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3120+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1560+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<13;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<6;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3168+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1584+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<13;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<6;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3216+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1608+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<13;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<6;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3264+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1632+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<13;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<6;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3312+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1656+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<13;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<6;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3360+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1680+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<13;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<6;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3408+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1704+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<13;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<6;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3456+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1728+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<13;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<6;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3504+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1752+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<13;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<6;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3552+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1776+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<13;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<6;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3600+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1800+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<13;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<6;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3648+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1824+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<13;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<6;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3696+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1848+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<13;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<6;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3744+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1872+i] = conditional_negate(min, sgn,zeros); } } diff --git a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z9_13_AVX512.c b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z9_13_AVX512.c index 548ab5f8ab..c8b210c8a2 100644 --- a/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z9_13_AVX512.c +++ b/openair1/PHY/CODING/nrLDPC_decoder/nrLDPC_tools/ldpc_gen_files/nrLDPC_cnProc_BG1_Z9_13_AVX512.c @@ -1,2340 +1,2261 @@ #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; -} +#define conditional_negate(a,b,z) _mm512_mask_sub_epi8(a,_mm512_movepi8_mask(b),z,a) void nrLDPC_cnProc_BG1_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); + __m512i zmm0, min, sgn,zeros,maxLLR; + zeros = _mm512_setzero_si512(); maxLLR = _mm512_set1_epi8((char)127); - for (int i=0;i<2;i+=2) { - zmm0 = ((__m512i*)cnProcBuf)[6+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + for (int i=0;i<1;i+=2) { + sgn = ((__m512i*)cnProcBuf)[6+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[12+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[0+i] = _mm512_sign_epi16(min, sgn); - zmm0 = ((__m512i*)cnProcBuf)[7+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + ((__m512i*)cnProcBufRes)[0+i] = conditional_negate(min, sgn,zeros); + sgn = ((__m512i*)cnProcBuf)[7+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[13+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i+=2) { - zmm0 = ((__m512i*)cnProcBuf)[0+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + for (int i=0;i<1;i+=2) { + sgn = ((__m512i*)cnProcBuf)[0+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[12+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[12+i] = _mm512_sign_epi16(min, sgn); - zmm0 = ((__m512i*)cnProcBuf)[1+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + ((__m512i*)cnProcBufRes)[6+i] = conditional_negate(min, sgn,zeros); + sgn = ((__m512i*)cnProcBuf)[1+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[13+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[13+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[7+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i+=2) { - zmm0 = ((__m512i*)cnProcBuf)[0+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + for (int i=0;i<1;i+=2) { + sgn = ((__m512i*)cnProcBuf)[0+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[6+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[24+i] = _mm512_sign_epi16(min, sgn); - zmm0 = ((__m512i*)cnProcBuf)[1+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); + ((__m512i*)cnProcBufRes)[12+i] = conditional_negate(min, sgn,zeros); + sgn = ((__m512i*)cnProcBuf)[1+i]; + min = _mm512_abs_epi8(sgn); zmm0 = ((__m512i*)cnProcBuf)[7+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[25+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[13+i] = conditional_negate(min, sgn,zeros); } //Process group with 4 BNs - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[66+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[96+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[48+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[78+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[126+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[108+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[36+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[18+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[36+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[96+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[18+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[78+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[126+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[108+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[96+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[48+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[36+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[66+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[18+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[48+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[126+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[108+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[156+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[78+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[36+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[66+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[18+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[48+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[96+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[78+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[216+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[108+i] = conditional_negate(min, sgn,zeros); } //Process group with 5 BNs - for (int i=0;i<7;i++) { - zmm0 = ((__m512i*)cnProcBuf)[384+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[246+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[276+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[138+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<7;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[492+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[246+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<7;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[384+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[246+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[708+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[354+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<7;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[384+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[246+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[708+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[570+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[924+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[462+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<7;i++) { - zmm0 = ((__m512i*)cnProcBuf)[276+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[384+i]; + for (int i=0;i<3;i++) { + sgn = ((__m512i*)cnProcBuf)[138+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[246+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[492+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[354+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[600+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[462+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1140+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[570+i] = conditional_negate(min, sgn,zeros); } //Process group with 6 BNs - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[726+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1356+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[678+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1452+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[726+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1548+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[774+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1644+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[822+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1596+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[918+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1740+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[870+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<4;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1356+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1404+i]; + for (int i=0;i<2;i++) { + sgn = ((__m512i*)cnProcBuf)[678+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[726+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1452+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[774+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1500+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[822+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1548+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[870+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1836+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[918+i] = conditional_negate(min, sgn,zeros); } //Process group with 7 BNs - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + for (int i=0;i<1;i++) { + sgn= ((__m512i*)cnProcBuf)[996+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1932+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[966+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + for (int i=0;i<1;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[1992+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[996+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<1;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2052+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1026+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<1;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2112+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1056+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<1;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2172+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1086+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<1;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2112+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1146+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2232+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1116+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[1932+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1962+i]; + for (int i=0;i<1;i++) { + sgn= ((__m512i*)cnProcBuf)[966+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[996+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[1992+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1026+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2022+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1056+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2052+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1086+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2082+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1116+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2292+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1146+i] = conditional_negate(min, sgn,zeros); } //Process group with 8 BNs - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1188+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2352+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1176+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2376+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1188+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2400+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1200+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2424+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1212+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2448+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1224+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2472+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1236+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2408+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2436+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1260+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2496+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1248+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2352+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2364+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1176+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1188+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2376+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1200+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2388+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1212+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2400+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1224+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2472+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1232+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2424+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1248+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2520+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1260+i] = conditional_negate(min, sgn,zeros); } //Process group with 9 BNs - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1284+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2544+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1272+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2568+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1284+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2592+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1296+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2616+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1308+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2640+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1320+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2664+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1332+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2688+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1344+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2640+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1368+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2712+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1356+i] = conditional_negate(min, sgn, zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2544+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2556+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1272+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1284+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2568+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1296+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2580+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1308+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2592+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1320+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2604+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1332+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2616+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1344+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2628+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1356+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2736+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1368+i] = conditional_negate(min, sgn, zeros); } //Process group with 10 BNs - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1386+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2760+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1380+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2772+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1386+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2784+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1392+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2796+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1398+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2808+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1404+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2820+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1410+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2832+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1416+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2844+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1422+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2778+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2814+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1434+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2856+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1428+i] = conditional_negate(min,sgn,zeros); } - for (int i=0;i<2;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2760+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2766+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1380+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1386+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2772+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1392+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1398+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2784+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1404+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2790+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1410+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2796+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1416+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2802+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1422+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2808+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1428+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2868+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1434+i] = conditional_negate(min,sgn,zeros); } //Process group with 19 BNs - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1464+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2880+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1440+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2928+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1464+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[2976+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1488+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3024+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1512+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3072+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1536+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3120+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1560+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3168+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1584+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3216+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1608+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3264+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1632+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3312+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1656+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3360+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1680+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3408+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1704+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3456+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1728+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3504+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1752+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3552+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1776+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3600+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1800+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3648+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1824+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3312+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1872+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3696+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1848+i] = conditional_negate(min, sgn,zeros); } - for (int i=0;i<3;i++) { - zmm0 = ((__m512i*)cnProcBuf)[2880+i]; - sgn = _mm512_sign_epi16(ones, zmm0); - min = _mm512_abs_epi8(zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2904+i]; + for (int i=0;i<1;i++) { + sgn = ((__m512i*)cnProcBuf)[1440+i]; + min = _mm512_abs_epi8(sgn); + zmm0 = ((__m512i*)cnProcBuf)[1464+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2928+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1488+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2952+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1512+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[2976+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1536+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3000+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1560+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3024+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1584+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3048+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1608+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3072+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1632+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3096+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1656+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3120+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1680+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3144+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1704+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3168+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1728+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3192+i]; + sgn = _mm512_xor_si512(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)[3216+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1776+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3240+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1800+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3264+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1824+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); - zmm0 = ((__m512i*)cnProcBuf)[3288+i]; + sgn = _mm512_xor_si512(sgn, zmm0); + zmm0 = ((__m512i*)cnProcBuf)[1848+i]; min = _mm512_min_epu8(min, _mm512_abs_epi8(zmm0)); - sgn = _mm512_sign_epi16(sgn, zmm0); + sgn = _mm512_xor_si512(sgn, zmm0); min = _mm512_min_epu8(min, maxLLR); - ((__m512i*)cnProcBufRes)[3744+i] = _mm512_sign_epi16(min, sgn); + ((__m512i*)cnProcBufRes)[1872+i] = conditional_negate(min, sgn,zeros); } } 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 index 028fc8acd6..966334a68d 100644 --- 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 @@ -1,5 +1,6 @@ #include #include +#include "../include/avx512fintrin.h" __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)); 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 index 454c57bde2..1b3aead33f 100644 --- 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 @@ -1,5 +1,6 @@ #include #include +#include "../include/avx512fintrin.h" __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)); 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 index 471c209c13..b929b48d0e 100644 --- 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 @@ -1,5 +1,6 @@ #include #include +#include "../include/avx512fintrin.h" __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)); 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 index 7bdaecb163..83ec3eab87 100644 --- 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 @@ -1,5 +1,6 @@ #include #include +#include "../include/avx512fintrin.h" __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)); 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 index f27234e514..66b66d6c48 100644 --- 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 @@ -1,5 +1,6 @@ #include #include +#include "../include/avx512fintrin.h" __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)); 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 index ed82005362..4eef884767 100644 --- 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 @@ -1,5 +1,6 @@ #include #include +#include "../include/avx512fintrin.h" __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)); 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 index 4a6f4e84c7..5c8dbd18fd 100644 --- 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 @@ -1,5 +1,6 @@ #include #include +#include "../include/avx512fintrin.h" __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)); 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 index fddad47a3a..4b462304ba 100644 --- 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 @@ -1,5 +1,6 @@ #include #include +#include "../include/avx512fintrin.h" __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)); 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 index 53fc972914..0ba1baa27a 100644 --- 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 @@ -1,5 +1,6 @@ #include #include +#include "../include/avx512fintrin.h" __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)); 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 index c335d28ea0..000bb5bcb6 100644 --- 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 @@ -1,5 +1,6 @@ #include #include +#include "../include/avx512fintrin.h" __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)); 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 index f03c575141..89070e0962 100644 --- 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 @@ -1,5 +1,6 @@ #include #include +#include "../include/avx512fintrin.h" __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)); 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 index 6a4d58f191..2a1380845d 100644 --- 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 @@ -1,5 +1,6 @@ #include #include +#include "../include/avx512fintrin.h" __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)); 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 index bd10af445e..f142d25d1f 100644 --- 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 @@ -1,5 +1,6 @@ #include #include +#include "../include/avx512fintrin.h" __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)); 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 index 55e116b51f..b4ab3963ec 100644 --- 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 @@ -1,5 +1,6 @@ #include #include +#include "../include/avx512fintrin.h" __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)); 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 index 712ec87469..aec739240e 100644 --- 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 @@ -1,5 +1,6 @@ #include #include +#include "../include/avx512fintrin.h" __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)); 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 index eda5b6a463..501021f109 100644 --- 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 @@ -1,5 +1,6 @@ #include #include +#include "../include/avx512fintrin.h" __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)); 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 index 9a1081c951..835406c3fc 100644 --- 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 @@ -1,5 +1,6 @@ #include #include +#include "../include/avx512fintrin.h" __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)); 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 index 7a42b26ad1..df043f09da 100644 --- 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 @@ -1,5 +1,6 @@ #include #include +#include "../include/avx512fintrin.h" __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)); 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 index 1863faff1c..c88f4fd799 100644 --- 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 @@ -1,5 +1,6 @@ #include #include +#include "../include/avx512fintrin.h" __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)); 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 index fc8ec65f5b..3d8ad4087d 100644 --- 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 @@ -1,5 +1,6 @@ #include #include +#include "../include/avx512fintrin.h" __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)); 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 index 7c2b22ab84..e149354070 100644 --- 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 @@ -1,5 +1,6 @@ #include #include +#include "../include/avx512fintrin.h" __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)); 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 index a7e29917dc..87b84e20e3 100644 --- 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 @@ -1,5 +1,6 @@ #include #include +#include "../include/avx512fintrin.h" __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)); 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 index 8467ccc0ef..05625adeca 100644 --- 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 @@ -1,5 +1,6 @@ #include #include +#include "../include/avx512fintrin.h" __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)); 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 index dd9c501e23..8f1eef0d86 100644 --- 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 @@ -1,5 +1,6 @@ #include #include +#include "../include/avx512fintrin.h" __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)); 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 index 080ef69200..4d22f6cad3 100644 --- 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 @@ -1,5 +1,6 @@ #include #include +#include "../include/avx512fintrin.h" __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)); 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 index 04a81d12e9..0b0b19e37b 100644 --- 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 @@ -1,5 +1,6 @@ #include #include +#include "../include/avx512fintrin.h" __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)); 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 index 6fd089c473..e99c45d669 100644 --- 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 @@ -1,5 +1,6 @@ #include #include +#include "../include/avx512fintrin.h" __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)); 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 index 8a67896e39..25cc25772c 100644 --- 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 @@ -1,5 +1,6 @@ #include #include +#include "../include/avx512fintrin.h" __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)); 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 index 5e1acf0903..d1bb694f7e 100644 --- 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 @@ -1,5 +1,6 @@ #include #include +#include "../include/avx512fintrin.h" __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)); 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 index 14ce05ac0b..cfc73d3cae 100644 --- 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 @@ -1,5 +1,6 @@ #include #include +#include "../include/avx512fintrin.h" __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)); 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 index 35c1a730e8..1ec26ff03c 100644 --- 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 @@ -1,5 +1,6 @@ #include #include +#include "../include/avx512fintrin.h" __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)); 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 index be02e00e7f..2fefbad81c 100644 --- 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 @@ -1,5 +1,6 @@ #include #include +#include "../include/avx512fintrin.h" __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)); 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 index 22e55f4543..7910c9bb85 100644 --- 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 @@ -1,5 +1,6 @@ #include #include +#include "../include/avx512fintrin.h" __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)); 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 index f2752744e3..1bd4846f85 100644 --- 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 @@ -1,5 +1,6 @@ #include #include +#include "../include/avx512fintrin.h" __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)); 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 index 3d49278c3d..5592f8283f 100644 --- 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 @@ -1,5 +1,6 @@ #include #include +#include "../include/avx512fintrin.h" __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)); 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 index 9bff5a5d51..d0926082cf 100644 --- 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 @@ -1,5 +1,6 @@ #include #include +#include "../include/avx512fintrin.h" __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)); 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 index 73ff170732..cf5d4b986a 100644 --- 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 @@ -1,5 +1,6 @@ #include #include +#include "../include/avx512fintrin.h" __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)); 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 index 174556650b..65828bd949 100644 --- 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 @@ -1,5 +1,6 @@ #include #include +#include "../include/avx512fintrin.h" __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)); 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 index 4425d37550..641eb01505 100644 --- 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 @@ -1,5 +1,6 @@ #include #include +#include "../include/avx512fintrin.h" __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)); 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 index 34476031c1..ef9fb0faf6 100644 --- 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 @@ -1,5 +1,6 @@ #include #include +#include "../include/avx512fintrin.h" __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)); 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 index 4f780cfa67..25031943fd 100644 --- 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 @@ -1,5 +1,6 @@ #include #include +#include "../include/avx512fintrin.h" __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)); 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 index d102d9cda6..4b6d79d89c 100644 --- 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 @@ -1,5 +1,6 @@ #include #include +#include "../include/avx512fintrin.h" __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)); 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 index 649ce55fa0..a4abfb87e5 100644 --- 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 @@ -1,5 +1,6 @@ #include #include +#include "../include/avx512fintrin.h" __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)); 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 index 194c559442..ad1dc9e103 100644 --- 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 @@ -1,5 +1,6 @@ #include #include +#include "../include/avx512fintrin.h" __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)); 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 index fd82e34130..8e325bdfa4 100644 --- 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 @@ -1,5 +1,6 @@ #include #include +#include "../include/avx512fintrin.h" __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)); 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 index 0c6b156921..04e0ad4dbf 100644 --- 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 @@ -1,5 +1,6 @@ #include #include +#include "../include/avx512fintrin.h" __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)); 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 index 2d6c7477bd..2b2ca88268 100644 --- 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 @@ -1,5 +1,6 @@ #include #include +#include "../include/avx512fintrin.h" __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)); 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 index 6a639f9cb4..745249c196 100644 --- 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 @@ -1,5 +1,6 @@ #include #include +#include "../include/avx512fintrin.h" __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)); 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 index 8b3b9f9183..f59c40998e 100644 --- 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 @@ -1,5 +1,6 @@ #include #include +#include "../include/avx512fintrin.h" __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)); 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 index 63631b39b4..6854cd72a4 100644 --- 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 @@ -1,5 +1,6 @@ #include #include +#include "../include/avx512fintrin.h" __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)); 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 index b19f2afe39..ce8ce8fd02 100644 --- 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 @@ -1,5 +1,6 @@ #include #include +#include "../include/avx512fintrin.h" __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));